我遇到LINQ小组的情况试图在不使用foreach
语句的情况下解决它,这里是escenary:
我有两个通用集合List<OrderHeader>
和List<OrderDetail>
,它们都有一个相同的字段TOTRGVS
,其中包含订单的总金额,订单数量是名为{{1的密钥}}
然后我想找到“NDORGV
和TOTRGVS
中的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但无法获取任何字段,只是扩展格式化方法。
答案 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
函数通常用于确定列表中的差异。