【发布时间】:2009-09-18 08:02:34
【问题描述】:
我对 LINQ 做噩梦了。
我有一个项目表,每个项目都有许多 InvoiceHeaders。 Invoice 标头有一个字段 AmountNet - 发票的值。
为了参数,我想检索 Projects 中的所有字段,包括发票标题的计数和 AmountNet 的总和。 IE。我的项目清单,我已经筹集了多少发票以及价值。
这听起来并不难......好吧,我刚刚花了两个小时的大部分时间通过 Google 和 SO 充电来寻找解决方案。我已经做到了:
from c in Projects _
select new with _
{ _
.ID = c.ID, _
.Invoices = InvoiceHeaders.Where(Function(p) c.ID = p.ProjectID).Count, _
.InvoiceValue = InvoiceHeaders.Where(Function(p) c.ID = p.ProjectID).Sum(function(f) f.AmountNet) _
}
那些有鹰眼的人会发现这个语句是多么可怕 - 对于每个项目,它运行两个查询来获取聚合。哎呀。
我在 Linq / vb 中也有多个聚合:
from ih in InvoiceHeaders _
group ih by ih.projectid into g = Group _
select new with { _
.InvoiceValue = g.Sum(function(f) f.AmountNet), _
.InvoiceCount = g.Count _
} _
但是我不知道如何返回项目的详细信息。 Esp 在 Vb.net 中视为“密钥”不起作用。
顺便说一句 - 我正在使用 VB.net :)
有什么想法吗?
【问题讨论】:
标签: vb.net linq-to-sql