加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用LINQ的多个SUM

发布时间:2020-12-15 06:17:26 所属栏目:百科 来源:网络整理
导读:我有一个如下的循环,可以使用多个SUM做同样的操作吗? foreach (var detail in ArticleLedgerEntries.Where(pd = pd.LedgerEntryType == LedgerEntryTypeTypes.Unload pd.InventoryType == InventoryTypes.Finished)){ weight += detail.GrossWeight; length
我有一个如下的循环,可以使用多个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操作的调用.为了清楚起见,我更新了这个例子以反映出来.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读