2016-03-31 9 views
-1

私はboolメソッドを持つクラス、例えば:Entity Frameworkのコードファーストで、自分のドメインモデルの述語を使用できますか?

public bool IsInFuture() 
{ return this.Date > DateTime.Now; } 

を持っていると私はEFコードファーストを使用してデータベースに格納します。

await context.Where(order => order.IsInFuture()).ToListAsync(); 

述語のロジックはかなり複雑になることが、私はしたくないこと:私は、LINQの操作でその述語を使用しようとするでしょう場合は、SQLに変換することができないよう、私は、例外を取得します私のコードでそれを複製してください。 Linqのコードに「インライン」できる方法はありますか?私はかなり確信しています、この問題には解決策があります。

ありがとうございます!

+0

これはなぜboolメソッドである必要がありますか?それは私にちょうどリターンプロパティを見て、次にあなたlinqがこれを使用することができますcontext.Where(order => order.IsInFuture).ToListAsync(); –

+0

次に、このプロパティをデータベースに保存する必要があります。私はそれらを計算する必要があります。 – Waldemar

+3

カスタム関数を使用することはできません。式は使用できますが、SQLに変換できる必要があります。 –

答えて

0

述語を直接使用することはできません。 EFはそれをSQL WHERE文に変換する方法を知っていますか?

あなたは、いくつかの選択肢があります。例えば、標準的な操作を使用するように問合せを修正して

  • をより小さい。しかし、これは述語からロジックを複製します。
  • 生のSQLクエリを使用します。これは論理も複製しますが、SQLでは複製されます。
  • エンティティのリスト全体をロードし、メモリ内をフィルタリングします(:ToList())。このように、述部を再利用することができます。 これは非常に小さなデータセットの場合にのみ有効です。
+0

述語関数を強制的にインライン化する考えがあります。理論的にはこれは助けになるはずです。私は数日後にそれをやろうとします。多分誰かがexpirienceを持っていて、それを共有することができますか? – Waldemar

関連する問題