0

私はSOに関する多くの投稿を調べて、さまざまな答えを考え出しました。どれもうまく機能していないようで、コードのバージョンなどに基づいて互いに矛盾しているようです。

「AsEnumerable()」の修正は避けたいと思います。これは、クエリが適用される前にすべての結果を評価するためです...最初にクエリを実行して、結果のデータをできるだけ小さくしたいと思います。 。

情報:クエリしているテーブルには、+200万行を含めることができます。

私の要件:

Entity Frameworkを介したSQLServer(コンパクトまたは標準)の整数列の「含む」関数。これにより、ユーザーは完全な番号を利用できなくても、検索する番号を入力できます。他の述語と組み合わせると、これは返されるデータの量を減らすのに非常に強力になります。

例えば f=>f.Id.ToString().Contains("202")<br/>

「ToString()」をエンティティストアコマンドに変換できないため、これは現在失敗しています。

またはT-SQLと同等のものとして

cast(Id as varchar(9)) LIKE '%202%'

バージョン: EF5 .Net 4.0 SQL
Server2008StandardまたはSQLCompact

4

2 に答える 2

1

SqlFunctions.StringConvertを使用できます

f=> SqlFunctions.StringConvert((double) f.Id).Contains("202")

のオーバーロードがないため、またはのいずれかintにキャストする必要がありますdoubledecimal

于 2012-11-27T09:02:03.563 に答える
1

まず、この関数を試してみてください: SqlFunctions.StringConvert

f=>SqlFunctions.StringConvert((double)f.id)).Contains("202")

int にはオーバーロードがないため、double に型キャストする必要があります。この関数は、データベース内の対応する関数に変換されます。

別のソリューションでは、ストアド プロシージャを作成し、EF から呼び出します。

objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters)

また

objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)
于 2012-11-27T09:11:31.313 に答える