2010-05-24 86 views
1

我在将传统SQL聚合查询转换为LINQ时遇到困难。基本数据转储的工作原理是这样:LINQ聚合/ SUM分组问题

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分组时,我收到有关我超出作用域/上下文的错误,并且我不确定还有什么其他解决方法。

回答

2

尝试将其分解为两个不同的查询以简化操作。例如:

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) 
+1

谢谢,那很好。 – Chrissi 2010-05-24 06:50:22

+1

这是晚餐。 – nathanchere 2010-08-12 02:15:51

+1

什么是?馅饼? :P – Chrissi 2010-09-07 03:04:53