У меня кошмар с LINQ.
У меня есть таблица Projects, и у каждого проекта есть много InvoiceHeaders. Заголовок Invoice имел поле AmountNet - значение счета.
Я хочу получить, ради аргумента, все поля из Projects, с количеством заголовков счетов и суммой AmountNet. То есть список моих проектов, сколько счетов я выставил и стоимость.
Звучит не сложно, да ... ну, я просто потратил большую часть двух часов, заряжаясь через 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) _
}
Те, у кого орлиные глаза, увидят, насколько УЖАСНЫ это утверждение - для каждого проекта выполняется два запроса для получения агрегатов. 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:)
Есть идеи?