-1

文字列型の List プロパティがあります。データベースを検索して、リストが結果と一致することを確認したいと思います。例えば:

List<string>strings = new List<string>({"test1","test2","etc"});

特定の条件下でこれらの文字列が存在するかどうかを確認するために、linq を使用してデータベースを検索したいと思います。

_databaseContext.Names.Where(x=>x.name == strings && specialID == 1);
4

1 に答える 1

2
_databaseContext.Names.Where(x => strings.Contains(x.name) && specialID == 1);

HashSet<>文字列のリストが一意である場合は、の代わりに を使用できますList<>。より良いパフォーマンスが得られると思います。

HashSet<string> hs = new HashSet<string> { "test1", "test2", "etc" };

_databaseContext.Names.Where(x => hs.Contains(x.name) && specialID == 1);

編集:指摘のためにアレクセイ・レベンコフに+1-Exists問題が発生するため、Contains代わりに使用する必要があります。また、サーバーでクエリを実行する場合とList同様に、生成された同じクエリを検証しました。HashSetListHashSet

生成されたクエリは次のようなものになります。

Select [name], [other columns]
From Names
Where [name] IN (N'test1', N'test2', N'etc')

ただし、 がローカル変数であると仮定specialIDすると、上記と同様の動的クエリが生成されますが、その値も SQL Server に渡されます。このクエリは、 を使用して実行されますsp_executesql

于 2013-06-15T00:58:12.053 に答える