代码之家  ›  专栏  ›  技术社区  ›  Jonathan Escobedo

lambda分组上的LINQ操作

  •  1
  • Jonathan Escobedo  · 技术社区  · 16 年前

    我陷入了一个林克小组的情况下,试图解决它不使用 foreach 声明如下:

    我有两个一般收藏 List<OrderHeader> List<OrderDetail> ,都有相同的字段 TOTRGVS 它包含订单的总金额,订单号是名为 NDORGV .

    然后我想找到“不一样的订单 托特罗夫斯 在里面 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 我不知道怎么找回 托特罗夫斯 场从 有序报头 . 我尝试过使用键,但无法获取任何字段,只获取格式化方法的扩展名。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Amy B    16 年前

    这可能会起作用:

    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();
    
        2
  •  1
  •   leppie    16 年前

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