代码之家  ›  专栏  ›  技术社区  ›  netmatrix01

如何将带有groupby子句的2个linq语句组合成1

  •  1
  • netmatrix01  · 技术社区  · 16 年前

    var prevProvisionsBySubBook = (from provision in prevProvisions
                   group provision by provision.SubBook
                       into subBookGrouping
                       select
                       new
                       {
                           Key = subBookGrouping.Key,
                           Value = subBookGrouping.Sum(t => t.ProvisionUSD)
                       });
    
    
            var currentProvisionsBySubBook
                = (from provision in currentProvisions
                   group provision by provision.SubBook
                       into subBookGrouping
                       select new
                       {
                           Key = subBookGrouping.Key,
                           Value = subBookGrouping.Sum(t => t.ProvisionUSD)
                       });
    
            var adjustmentChangeBySubBook
                = (from current in currentProvisionsBySubBook
                   select new
                   {
                       Key = current.Key,
                       Value = current.Value
                               - (prevProvisionsBySubBook.Any() ? prevProvisionsBySubBook.Where(t => t.Key == current.Key).Single().Value : 0)
                   });
    

    任何帮助都会得到报答。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Fede    16 年前

    你可以这样做:

    var adjustmentChangeBySubBook =
        from provision in
            (from currentProvision in currentProvisions select new
                {
                    currentProvision.SubBook,
                    CurrentUSD = currentProvision.ProvisionUSD,
                    PreviousUSD = 0
                }).Concat
            (from prevProvision in prevProvisions select new
                {
                    prevProvision.SubBook,
                    CurrentUSD = 0,
                    PreviousUSD = prevProvision.ProvisionUSD
                })
        group provision by provision.SubBook into subBookGrouping select new
        {
            subBookGrouping.Key,
            Value = subBookGrouping.Sum(t => t.CurrentUSD - t.PreviousUSD)
        };