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操作的调用.为了清楚起见,我更新了这个例子以反映出来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |