使用Linq到SQL和VB.net聚合父/子表

时间:2009-09-18 08:02:34

标签: vb.net linq-to-sql

我正在与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:)

有什么想法吗?

1 个答案:

答案 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 _
}