用于搜索列表的linq查询

时间:2013-06-15 00:42:57

标签: c# linq

我有一个string类型的List属性。我想搜索我的数据库,以确保列表与结果匹配。例如:

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

我现在想在我的数据库中使用linq进行搜索,以检查在某些条件下是否存在这些字符串。

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

1 个答案:

答案 0 :(得分: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);

编辑:给Alexei Levenkov +1指出 - Exists会导致问题,应该使用Contains。此外,验证了为ListHashSet生成的相同查询,因此,如果您要在服务器上进行查询,则无论您使用List还是HashSet都无关紧要。

生成的查询将是一些类似的东西。

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

但是,假设specialID是局部变量,它将生成类似于上面的动态查询,但也将其值传递给SQL Server。此查询使用sp_executesql执行。