2009-09-18 23 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 _ 
}