使用LINQ的多个SUM [英] Multiple SUM using LINQ
问题描述
我有如下循环,我可以使用多个SUM来做同样的事情吗?
I have a loop like the following, can I do the same using multiple SUM?
foreach (var detail in ArticleLedgerEntries.Where(pd => pd.LedgerEntryType == LedgerEntryTypeTypes.Unload &&
pd.InventoryType == InventoryTypes.Finished))
{
weight += detail.GrossWeight;
length += detail.Length;
items += detail.NrDistaff;
}
推荐答案
从技术上讲,您拥有的可能是最有效的方式来完成您要问的事情.但是,您可以在IEnumerable< T>上创建扩展方法.称为Each可能会使它更简单:
Technically speaking, what you have is probably the most efficient way to do what you are asking. However, you could create an extension method on IEnumerable<T> called Each that might make it simpler:
public static class EnumerableExtensions
{
public static void Each<T>(this IEnumerable<T> col, Action<T> itemWorker)
{
foreach (var item in col)
{
itemWorker(item);
}
}
}
并这样称呼它:
// Declare variables in parent scope
double weight;
double length;
int items;
ArticleLedgerEntries
.Where(
pd =>
pd.LedgerEntryType == LedgerEntryTypeTypes.Unload &&
pd.InventoryType == InventoryTypes.Finished
)
.Each(
pd =>
{
// Close around variables defined in parent scope
weight += pd.GrossWeight;
lenght += pd.Length;
items += pd.NrDistaff;
}
);
更新: 只是另外一注.上面的示例依赖于闭包.应在父作用域中声明变量weight,length和items,以允许它们在对itemWorker操作的每次调用之后都可以持续存在.为了清楚起见,我已经更新了示例以反映这一点.
UPDATE: Just one additional note. The above example relies on a closure. The variables weight, length, and items should be declared in a parent scope, allowing them to persist beyond each call to the itemWorker action. I've updated the example to reflect this for clarity sake.
这篇关于使用LINQ的多个SUM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!