2010-09-16 204 views
0

我想把SQL查询复制到LINQ中。 任何人都可以帮忙吗?将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(){ 
} 

,并建立我的自定义发票的对象,但,我无法看到newInv中的任何属性。

任何人都可以建议吗?

回答

1

我没有时间为一个完整的答案了,但:

  • 要获取关键的属性,使用newInv.Key.StrReference
  • 要获取聚合体(如最大值)使用newInv.Max(x => x.ProjectId)

希望这足以让你走。基本上,newInv将是一个的条目,与相关的(这是你分组的)。

+0

感谢那个乔恩我昨天有点脑冻结了。 – DazManCat 2010-09-17 09:13:30

+0

当然,其他选项是做一个简单的LINQ查询,然后做一个invoices.GroupBy(x => new {x.InvoiceID,x.InvoiceDate,x.Reference,x.TotalValue}); – DazManCat 2010-09-17 09:24:47