2011-11-21 86 views
2

我有這個有效查詢(在.Net4.0)是可以獲得還是開的發票:.net 3.5中的這個查詢的等價物是什麼?

Dim dinvs = AcStudentInvoiceDetails _ 
      .GroupBy(Function(di) di.InvoiceID) _ 
      .Select(Function(di2) New With { _ 
       .InvoiceID = di2.Key, _ 
       .DebitSum = di2.Sum(Function(di3) di3.Debit), _ 
       .CreditSum = di2.Sum(Function(di3) di3.Credit) }) _ 
      .Where(Function(dd) dd.DebitSum > dd.CreditSum) 

Dim invs = From i In AcStudentInvoices _ 
      Join di In dinvs On i.ID Equals di.InvoiceID _ 
      Select i 

我測試了LinqPad此查詢,它得到正確的結果,但LinqPad工作在淨4.0,並且我的項目在.Net3.5上工作,錯誤在於我們有一個匿名對象,並且.Net3.5,Where不能使用匿名對象。

我試圖創建一個強類型的類,而不是匿名的對象,但我失去了我的LINQ的語法,所以我需要在.NET3.5

錯誤文本摘錄此查詢等價物:

重載決策失敗,因爲沒有可訪問的「去哪兒」可以用這些參數調用:

擴展方法「公共功能位置(謂語System.Linq.Expressions.Expression(中System.Func(中<匿名類型>,Integer,Boolean)))作爲System.Linq.IQueryable('<匿名類型>)'在'System.Linq.Queryable'中定義:嵌套函數不具有與委託'System.Func的<匿名類型>,整型,布爾型)」 ......

回答

1

你應該能夠具有較強的類型

Public Class ST 
    Public Property InvoiceID As String 
    Public Property DebitSum As Double 
    Public Property CrediSum As Double 
End Class 

使你這樣的查詢要做到這一點,

Dim dinvs = AcStudentInvoiceDetails 
      .GroupBy(Function(di) di.InvoiceID) 
      .Select(Function(di2) New ST With { 
       .InvoiceID = di2.Key, 
       .DebitSum = di2.Sum(Function(di3) di3.Debit), 
       .CreditSum = di2.Sum(Function(di3) di3.Credit) }) 
      .Where(Function(dd As ST) dd.DebitSum > dd.CreditSum) 

Dim invs = From i In AcStudentInvoices 
      Join di In dinvs On i.ID Equals di.InvoiceID 
      Select i 
相關問題