2010-12-30 13 views
1

コンパイルしたLINQ to SQLクエリをリファクタリングすることは可能ですか?いくつかのロジックを持つクエリがあるとします。その上に構築したいと思います。そのクエリを再利用することは可能ですか?例えばコンパイル済みのLINQクエリをどのようにリファクタリングしますか?

、私はアクティブなアイテムを取得するための基本的なクエリがあるとします。

Func<DataContext, IQueryable<Item>> GetActiveItems = 
    CompiledQuery.Compile((DataContext context) => 
     context.Items.Where(item => item.IsActive)); 

私は別のクエリを作成するには、上記の式に構築したいと思います。 CompiledQueryのドキュメントは、コンパイルされたデリゲートの結果に別の演算子を適用できないことを示しています。そのような表現をリファクタリングする推奨される方法は何ですか?

Expressionを使用する必要がありますが、どのように使用する必要がありますか?それとも良い方法がありますか?

答えて

1

あなたはこれを支援するPredicateBuilderのようなものを使用することができます。

Albahari 1がシンプルであり、それはあなたが所有して拡張または開発するのは簡単ですが、非常によく動作します: 明らかhttp://www.albahari.com/nutshell/predicatebuilder.aspx

クエリが依存している場合SQL式に変換することができないローカルメソッドは、あなたがそれをやる方法を再考する必要があります。

+0

ありがとうございました。 'PredicateBuilder'は最適ではありませんでしたが、LinqKitの' Expand'メソッドは私が必要としたものでした。あなたの答えを編集してそれを参照することができれば(小さな例が好ましい)、私はそれを喜んで受け入れます。 –

-1

いいえ、コンパイル済みです。つまり、すでにsqlに翻訳されています。あなたは新しいクエリからやり直す必要があります。

+1

私はそれがコンパイルされていることを知っています。私がしたいことは、 'Expression'をリファクタリングして別のものに再利用することです。 –

関連する問題