他のデータの中にプロシージャコードを含むテーブルがあります(「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
が、これは厄介な取得します。私は1つの場所で定義されたルックアップを持っているしたいと思いますので、私はのMyDataの拡張でこれを入れてみました:
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が認識できるようにする方法はありますか?私はそれを1つの場所に定義し、MyDataのフィールドであるかのように記述するだけです?これまで私が考えることができるのは、MyDataでSQLビューを作成し、それをリンクしてデータ・コンテキストに取り込むことですが、それを回避しようとしています。どんなアイデアも歓迎されます。ありがとう。
私は似たような状況に類似した何かをやりましたしかし、ここで問題となるのは、 "MyData"が膨大になる可能性があり、クエリの狭い部分が結果セットへの変換後に来るということです。しかし、大部分の状況ではまだ有効な答えです。 – gfrizzle