我正在与LINQ做噩梦。
我有一个Projects表,每个项目都有很多InvoiceHeaders。 Invoice标题有一个字段AmountNet - 发票的值。
为了论证,我想重新审核来自Projects的所有字段,包括发票标题的数量和AmountNet的总和。即我的项目清单,我筹集了多少发票和价值。
听起来不是很难......好吧,我刚刚花了两个小时的时间通过谷歌和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) _
}
那些有鹰眼的人会发现HORRIFIC如何声明它 - 对于每个项目它运行两个查询来获取聚合。 Eughk。
我在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视为'Key'在Vb.net中不起作用。
BTW - 我正在使用VB.net:)
有什么想法吗?
答案 0 :(得分:0)
我的尝试就是这个
from ih in InvoiceHeaders _
group ih by ih.projectid into g = Group _
select new with {.pjs=(from p in projects where p.ID=ih.projectid select p), _
.InvoiceValue = g.Sum(function(f) f.AmountNet), _
.InvoiceCount = g.Count _
}