1

我被一个LINQ组困住了,试图在不使用foreach语句的情况下解决它,这里是escenary:

我有两个通用集合List<OrderHeader>List<OrderDetail>,它们都有一个TOTRGVS包含订单总额的相同字段,并且订单数是名为 的键NDORGV

然后我想找到“与和不同TOTRGVS的订单”,所以我尝试了以下查询:OrderHeaderOrderDetail

 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我不知道如何TOTRGVSOrderHeader. 我尝试使用 Key 但无法获取任何字段,只是格式化方法的扩展。

4

2 回答 2

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();
于 2009-04-06T17:02:26.317 回答
1

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

于 2009-04-06T16:03:45.897 回答