2013-06-14 8 views
9

整数の連続した数字がテーブルの主キーに含まれているかどうかをチェックするlinqクエリを書くのは難しいです。したがって、列​​に主キーを持つEmployeesという表があるとします。このプライマリキーがSQL Serverデータ型のINTであるとします。整数にはLinqを使用しています

string filter = "456"; 

var results = from e in myDbContext.Employees 
    where e.Id.Contains(filter) 
    select e; 

問題は方法がで整数データ型のために提供されていない含まれていることである:私は、主キーを含む文字列のような456何かがすべての従業員を返しますEntity Frameworkのコードファーストを使用してLINQクエリを記述したいと思いますC#の...

+1

FYI string.Containsは()拡張メソッドではなく、文字列オブジェクトの定期的な方法です。 – recursive

+0

@再帰的:ありがとうございます、あなたの修正を含めるように質問を編集しました。 – Andrew

+1

X.L.Antはソリューションを提供していますが、カラムのデータ型を 'char'または' varchar'に変更することを検討したいかもしれません。数値型の目的は、値の*大きさ*を格納して処理することです。そのため、int型には、「より大きい」や「より小さい」などの組み込み関数があります。あなたのIDの個々のシンボルが実際の意味を持っているなら、あなたが格納しているのは実際には*コード*です。これは数字のシンボルを使用しますが、マグニチュードを表しません。 – JDB

答えて

20

試してみてください。

var results = from e in myDbContext.Employees 
    where SqlFunctions.StringConvert((double)e.Id).Contains(filter) 
    select e; 
+0

'ToString()'呼び出しはSQLに変換されますか? –

+0

"Linq to Entitiesがメソッド 'System.String ToString()'メソッドを認識せず、このメソッドをストア式に変換できないというエラーが表示されます。 – Andrew

+0

@Andrew編集しました。これはうまくいくはずです。 –

2

あなたは両方の文字列に変換し、クエリを行うことができます。あなたのケースでは:

string filter = "456"; var results = from e in myDbContext.Employees where e.Id.ToString().Contains(filter) select e;

+1

'ToString()は' NotSupportedException'型の例外をスローしますか? – sepehr

関連する問題