LINQ中的Group By和Sum子句

时间:2010-06-22 10:07:08

标签: linq-to-sql

我写了一个简单的linq查询如下:

var query = from c in context.ViewDeliveryClientActualStatus
            join b in context.Booking on c.Booking equals b.Id
            join bg in context.BookingGoods on c.Booking equals bg.BookingId
            select new { c, b, bg };

我已使用多个前提过滤了上一个查询,然后需要按一组字段进行分组并得到其中一些字段的总和,如下所示:

var rows = from a in query
           group a by new {h = a.c.BookingRefex, b = a.c.ClientRefex, c = a.b.PickupCity, d = a.b.PickupPostalCode} into g
           select new
           {                     
               Booking_refex = g.Key.h,
               Client_refex = g.Key.b,
               //Local = g.
               Sum_Quan = g.Sum(p => p.bg.Quantity),
           };

我想从a获取一些我没有包含在group by子句中的值。我怎样才能获得这些价值?它们无法通过g访问。

2 个答案:

答案 0 :(得分:4)

LINQ表达式中的gIEnumerable,其中包含a's,其中包含额外的属性Key。如果您要访问不属于a的{​​{1}}字段,则必须执行某种聚合或选择。如果您知道组中所有元素的特定字段相同,则可以从组中的第一个元素中选择字段的值。在此示例中,我假设Key有一个名为c的字段:

Value

但是,如果组中的var rows = from a in query group a by new { h = a.c.BookingRefex, b = a.c.ClientRefex, c = a.b.PickupCity, d = a.b.PickupPostalCode } into g select new { BookingRefex = g.Key.h, ClientRefex = g.Key.b, SumQuantity = g.Sum(p => p.bg.Quantity), Value = g.First().c.Value }; 相同,您可以将其包含在分组中并使用c.Value进行访问。

答案 1 :(得分:1)

只需在

中添加这些字段即可
new {h = a.c.BookingRefex, b = a.c.ClientRefex, c = a.b.PickupCity, d = a.b.PickupPostalCode}

然后可以用g访问它们。