我有一个string类型的List属性。我想搜索我的数据库,以确保列表与结果匹配。例如:
List<string>strings = new List<string>({"test1","test2","etc"});
我现在想在我的数据库中使用linq进行搜索,以检查在某些条件下是否存在这些字符串。
_databaseContext.Names.Where(x=>x.name == strings && specialID == 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
。此外,验证了为List
和HashSet
生成的相同查询,因此,如果您要在服务器上进行查询,则无论您使用List
还是HashSet
都无关紧要。
生成的查询将是一些类似的东西。
Select [name], [other columns]
From Names
Where [name] IN (N'test1', N'test2', N'etc')
但是,假设specialID
是局部变量,它将生成类似于上面的动态查询,但也将其值传递给SQL Server。此查询使用sp_executesql
执行。