Проблема агрегата LINQ / группировки SUM - PullRequest
1 голос
/ 24 мая 2010

У меня возникают проблемы с преобразованием традиционного агрегатного запроса SQL в LINQ. Базовый дамп данных работает так:

    Dim result =
    (From i As Models.InvoiceDetail In Data.InvoiceDetails.GetAll
    Join ih As Models.InvoiceHeader In Data.InvoiceHeaders.GetAll On i.InvoiceHeaderID Equals ih.ID
    Join p As Models.Product In Data.Products.GetAll On i.ProductID Equals p.ID
    Join pg As Models.ProductGroup In Data.ProductGroups.GetAll On p.ProductGroupID Equals pg.ID
    Join gl As Models.GLAccount In Data.GLAccounts.GetAll On pg.GLAccountSellID Equals gl.ID
    Where (gl.ID = GLID)
    Select ih.Period,i.ExtendedValue)

Что мне действительно нужно, чтобы выйти, так это ih.Period (значение от 1 до 12) и соответствующее совокупное значение для i.ExtendedValue. Когда я пытаюсь сгруппировать ih, я получаю ошибки о том, что я вне контекста / контекста, и я не уверен, как еще это сделать.

1 Ответ

2 голосов
/ 24 мая 2010

Попробуйте разделить его на два разных запроса для простоты. Пример:

From result In
    (From i As Models.InvoiceDetail In Data.InvoiceDetails.GetAll
    Join ih As Models.InvoiceHeader In Data.InvoiceHeaders.GetAll On i.InvoiceHeaderID Equals ih.ID
    Join p As Models.Product In Data.Products.GetAll On i.ProductID Equals p.ID
    Join pg As Models.ProductGroup In Data.ProductGroups.GetAll On p.ProductGroupID Equals pg.ID
    Join gl As Models.GLAccount In Data.GLAccounts.GetAll On pg.GLAccountSellID Equals gl.ID
    Where (gl.ID = GLID) And (ih.FinancialYear = FinancialYear)
    Select ih.Period, i.ExtendedValue)
Group By result.Period Into Sum(result.ExtendedValue)
...