2010-11-19 2 views
1

EFがエンティティをフィルタリングするためにT-SQLのテーブル値関数を使用したいと考えています。 EFはだから後で、私はEntity Frameworkのサーバー機能別エンティティをフィルタリングしますか?

IQueryable<Company> BySearchOptions(this IQueryable<Company, SearchOptions options) 

のような拡張メソッドを作成することができます

...WHERE CompanyID IN (SELECT CompanyID FROM dbo.BySearchOptions({0},{1})) 

のようにどこのステートメントを追加し、

のような他の人とそれをチェーンできるように

機能は、企業IDのリストを返します。

var companies = Entities.Companies. 
    Where(someconde).BySearchOptions(myOptionsObject).OrderBy.Whatever... 

可能でしょうか?

EDIT: Where()メソッドが述語ではなくESQL文字列を使用できるように、Entity SQLがあることは知っています。 Entity SQLを使用してt-sql関数を適用できますか?

答えて

0

ストアドプロシージャにselectステートメントを配置し、EFからストアドプロシージャを呼び出すことで、関数をフィルタリングできます。

あなたが探しているエレガントなソリューションではないかもしれませんが、うまくいくでしょう。

+0

ありがとうございますが、私は、フィルタを他のwhere節が結合、グループなどで使用されるようにしたい – Evgenyt

1

EFは、SQL関数のマッピングをサポートしていますが、(EF 4では)テーブル値を返す関数をサポートしていません。

代わりにObjectContext.ExecuteStoreQueryを使用し、T-SQLを渡すこともできます。

しかし、質問すると、クエリをさらに構成することはできません。

考えられる回避策は、SQLクエリをDBサーバービューに配置することです。