這是在您的Linq Expression中關閉中捕獲的問題。
在英語中,這意味着您正嘗試將CLng(cboProperty.EditValue)
傳遞給Linq表達式。這是合法的。但是,當Linq to Entity Framework查看它時,它不能將其轉換爲SQL。表達式包含:
- .NET類(最有可能是WinForm控件我懷疑)
- 在.NET類的屬性調用
- 一個.NET的.NET類的成果轉化通話。
不好Linq2EF不能找出那些東西了!然而,這將工作。
Dim servhist As IQueryable(Of servicesHistory) = db.servicesHistories
If cboProperty.EditValue <> Nothing Then
Dim editValue = CLng(cboProperty.EditValue)
servhist = servhist.Where(Function(p) p.propID = editValue)
End If
grdServHist.DataSource = servhist.ToList()
現在看起來完全一樣。但是,如果你問一個Linq Ninja,他們會告訴你兩者是非常不同的,因爲我已經將Linq Expression中的CLng(cboProperty.EditValue)
轉換爲函數調用。
就我個人而言,我對Lambda表達式與Lambda函數的語法如何具有相同的語法有兩個想法,導致了這些例外。
BTW我更喜歡我查詢這種形式...
Dim editValue = CLng(cboProperty.EditValue)
Dim servhist As IQueryable(Of servicesHistory) = _
db.servicesHistories.Where(Function(p) p.propID = editValue or editValue is Nothing)
grdServHist.DataSource = servhist.ToList()
這可以讓你再重構的IQueryable爲編譯查詢。
完美,像一個魅力工作! :) – 2013-05-14 16:22:45