Преобразование запроса SQL с group by в запрос LINQ - PullRequest
0 голосов
/ 16 сентября 2010

Я пытаюсь реплицировать SQL-запрос в LINQ. Может ли кто-нибудь помочь?

SQL:

 SELECT tblInvoice.lngID AS InvoiceID,
                tblInvoice.dtTimeStamp AS InvoiceDate,
                tblInvoice.strReference,
                tblInvoice.fltTotalValue,
                max(Project.ProjectID) AS ProjectID,
                max(Project.ProjectName) AS ProjectName,
                max(Project.Location) AS ProjectLocation
        FROM    tblInvoice INNER JOIN
                tblInvoiceLine ON tblInvoice.lngID = tblInvoiceLine.lngInvoiceID 
        WHERE   (tblInvoice.intStatus != 0)
        AND     (tblInvoice.lngPersonID = @PersonID)
        GROUP BY tblInvoice.lngID, tblInvoice.dtTimeStamp, strReference, fltTotalValue
        ORDER BY tblInvoice.lngID DESC

LINQ до сих пор:

var invoices = from inv in db.TblInvoices
    join invLine in db.TblInvoiceLines on inv.LngID equals invLine.LngInvoiceID
    where inv.IntStatus != 0
    where inv.LngPersonID == personID
    group inv by  new {inv.LngID,inv.DtTimeStamp,inv.StrReference,inv.FltTotalValue} into newInv

Часть проблемы в том, что я хочу сделать

select new Invoice(){
}

и создайте свой собственный объект Invoice, но я не вижу никаких свойств в newInv.

Может кто-нибудь посоветовать?

1 Ответ

1 голос
/ 16 сентября 2010

Сейчас у меня нет времени на полный ответ, но:

  • Чтобы узнать свойства ключа, используйте newInv.Key.StrReference etc
  • Чтобы получить агрегаты (например, максимальные значения) используйте newInv.Max(x => x.ProjectId) и т. д.

Надеюсь, этого будет достаточно для продолжения.По сути, newInv будет группой записей, со связанной клавишей (это то, что вы сгруппировали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...