我无法获得列表的最高记录

时间:2012-08-28 11:24:53

标签: linq list group-by sql-order-by record

我有两个列表,ddr.Out和ddr.Dil。 第一个列表我必须按合同分组,然后按合同递减,然后按金额递减,因为可以有几个具有相同合同的记录,我只想要一个具有最高金额的记录。

然后我必须使用ddr.dil中存在的合同中的金额更新ddr.out中的每个金额。

我的问题是,我无法在这个陈述中找到从ddr.out获得最高金额的方法。

有什么想法吗? 瑞·马丁斯

ddr.Out.GroupBy(ou => ou.Contract);
ddr.Out.OrderByDescending(ou => ou.Contract).ThenByDescending(ou=> ou.Amount);
ddr.Out.ForEach(ou => ou.Amount += ddr.Dil
    .Where(dil => dil.Referred && 
                  dil.Wad == wad &&
                  dil.Cycle == cal.ID && 
                  dil.Contract == ou.Contract)
    .Select(dil => dil.Amount)
    .FirstOrDefault());

1 个答案:

答案 0 :(得分:0)

您可以使用ddr.Dil的{​​{3}}获得IEnumerable中的最大金额。

另请注意,Max function上的文档说明了:

Modifying the underlying collection in the body of the Action<T> delegate 
is not supported and causes undefined behavior.

而是使用Select创建新集合并替换ddr.Out

newOut = 
    ddr.Out.GroupBy(ou => ou.Contract)
       .OrderByDescending(ou => ou.Contract)
       .ThenByDescending(ou=> ou.Amount)
       .Select(ou => ou.Amount += ddr.Dil
           .Where(dil => dil.Referred && 
                  dil.Wad == wad &&
                  dil.Cycle == cal.ID && 
                  dil.Contract == ou.Contract)
           .Max(dil => dil.Amount));