Lambda分组的LINQ操作

时间:2009-04-06 15:58:03

标签: linq lambda group-by

我遇到LINQ小组的情况试图在不使用foreach语句的情况下解决它,这里是escenary:

我有两个通用集合List<OrderHeader>List<OrderDetail>,它们都有一个相同的字段TOTRGVS,其中包含订单的总金额,订单数量是名为{{1的密钥}}

然后我想找到“NDORGVTOTRGVS中的OrderHeader订单”,因此我尝试了以下查询:

OrderDetail
List<RGVCAFAC_ERRORES> diff = (from d in lstOrderDetail join c in lstOrderHeader on d.NDORGV equals c.NDORGV group d by d.NDORGV into g let difTOTOrderDetail = g.Select(p => p.TOTRGVS).Sum() let difTOTOrderHeader = g.Key.???? let diffTOT = difTOTOrderHeader - difTOTOrderDetail where diffTOT != 0 select new _ERRORS { NDORGV = g.Key, IMPORT = diffTOT } ).ToList(); 中的

我不知道如何从difTOTOrderHeader检索TOTRGVS字段。我尝试过使用Key但无法获取任何字段,只是扩展格式化方法。

2 个答案:

答案 0 :(得分:2)

这可能会起到作用:

var dictDetails = lstOrderDetail
  .GroupBy(d => d.NDORGV)
  .ToDictionary(g => g.Key, g => g.Sum(d => d.TOTRGVS));

var result = lstOrderHeader
  .Where(h => dictDetails[h.NDORGV] != h.TOTRGVS)
  .ToList();

答案 1 :(得分:1)

Except函数通常用于确定列表中的差异。