GROUP BY和点心条款在LINQ
问题描述:
我写了一个简单的LINQ查询,如下所示:GROUP BY和点心条款在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
访问。
答
LINQ表达式中的g
是IEnumerable
,其中包含a's
,并带有一个额外的属性Key
。如果您想要访问不属于Key
的a
字段,则必须执行某种聚合或选择。如果您知道组中所有元素的特定字段都相同,则可以从组中的第一个元素中选择字段的值。在这个例子中,我假设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
是一组在同一你还不如将其包含在它使用g.Key.cValue
分组和访问。
+0
感谢Martin,正是我需要的。还学到了一些有用的东西! – Hallaghan 2010-06-22 11:13:12
答
只需添加这些字段中
new {h = a.c.BookingRefex, b = a.c.ClientRefex, c = a.b.PickupCity, d = a.b.PickupPostalCode}
他们会以g访问即可。
我不明白你是如何通过做群组来获得领域的。在你的例子中,你正在计算bg.Quantity的总和,它不是g.Key的一部分。你能更详细地解释你的问题吗? – 2010-06-22 10:56:13
我通过总和访问了bg.Quantity,但是如果我键入g。它不在字段属性列表中。 – Hallaghan 2010-06-22 10:58:36