c# – 使用LINQ的多个SUM

前端之家收集整理的这篇文章主要介绍了c# – 使用LINQ的多个SUM前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个如下的循环,可以使用多个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>上创建一个扩展方法.称为每个可能会使其更简单:
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操作的调用.为了清楚起见,我更新了这个例子以反映出来.

猜你在找的C#相关文章