我写了一个简单的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
访问。
答案 0 :(得分:4)
LINQ表达式中的g
是IEnumerable
,其中包含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访问它们。