Multiple SUM using LINQ

后端 未结 5 2680
无人共我
无人共我 2021-02-20 18:14

I have a loop like the following, can I do the same using multiple SUM?

foreach (var detail in ArticleLedgerEntries.Where(pd => pd.LedgerEntryType == LedgerEn         


        
5条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-02-20 18:24

    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 called Each that might make it simpler:

    public static class EnumerableExtensions
    {
        public static void Each(this IEnumerable col, Action itemWorker)
        {
            foreach (var item in col)
            {
                itemWorker(item);
            }
        }
    }
    

    And call it like so:

    // 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;
            }
        );
    

    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.

提交回复
热议问题