我有一个如下的循环,可以使用多个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操作的调用.为了清楚起见,我更新了这个例子以反映出来.