我有一個包含其他數據(我們稱之爲「MyData」)之間的過程代碼的表。我有另一張表,其中包含有效的程序代碼,它們的描述以及這些代碼有效的日期。每次我想在MyData的報告,其中包括過程描述,我必須做一個類似的查詢:如何將自定義列添加到LINQ to SQL可以轉換爲SQL的表中
From m in dc.MyDatas _
Join p in dc.Procedures On m.proc_code Equals p.proc_code _
Where p.start_date <= m.event_date _
And If(p.end_date.HasValue, p.end_date.Value, Now) >= m.event_date _
Select m.proc_code, p.proc_desc
因爲有很多地方我想說明的過程描述,這就會變得混亂。我想在一個地方定義的查詢,所以我試圖把這個在邁德特的擴展:
Partial Public Class MyData
Public ReadOnly Property ProcedureDescription() As String
Get
Dim dc As New MyDataContext
Return _
(From p in dc.Procedures _
Where p.proc_code = Me.proc_code _
And p.start_date <= Me.event_date _
And If(p.end_date.HasValue, p.end_date.Value, Now) >= Me.event_date _
Select p.proc_desc).SingleOrDefault
End Get
End Property
End Class
顯示數據時的作品,但你不能在查詢中使用它,因爲它不知道如何把它變成一個SQL語句:
Dim test = _
From x In dc.MyDatas _
Select x.proc_code _
Where x.ProcedureDescription.Contains("test")
錯誤:會員「MyProject.MyData.ProcedureDescription」沒有支持轉換爲SQL。
有沒有辦法將像這樣的複雜查找(即非平凡連接)轉換爲SQL可以識別的內容,以便我可以在一個地方定義它,並且只需引用描述就好像它是MyData中的字段?到目前爲止,我能想到的唯一的事情就是在MyData上創建一個SQL視圖,進行鏈接並將其引入到我的數據上下文中,但我想盡量避免這種情況。任何想法都會受到歡迎。謝謝。
我已經做了類似的情況類似,但這裏的問題是「MyData」可能很大,並且查詢的縮小部分會在轉換爲結果集之後出現。儘管如此,在大多數情況下仍然是有效的答案。 – gfrizzle 2009-12-08 13:38:56