2009-09-18 82 views
0

我对LINQ有一个噩梦。使用Linq将聚合父/子表转换为SQL和VB.net

我有一个项目表,每个项目都有很多InvoiceHeaders。发票标题有一个字段AmountNet - 发票的价值。

为了参数的缘故,我想从项目的所有字段中检索发票标题的数量和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) _ 
} 

那些有鹰的眼睛一定会发现这种说法是多么可怕的 - 每一个项目运行两个查询得到聚集。 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看作'钥匙'在Vb.net中不起作用。

顺便说一句 - 我正在使用VB.net :)

任何想法?

回答

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