如何使用List <>作为Linq的where子句的条件?

tha*_*awg 1 c# linq sql-server

所以我一直在撞击众所周知的墙壁几个小时,我想我会看到其他人是否已经解决了这个问题......

我有一些List<string>值,我想用作搜索过滤器.在过去,我会WHERE field = 'a' OR field = 'b' OR field = 'C'在查询中构建一个字符串.但是对于Linq建筑而言,长WHERE条款相当困难.我希望能起作用的是:

var results = from x in x.table
              where x.Equals(List<string>)
              select x;
Run Code Online (Sandbox Code Playgroud)

唉,编译器不够聪明,无法将List <>分解为WHERE field = 'a' OR field ='b'一种查询.我已经将这个过程作为foreach循环继续前进,List<string>但当我希望在SQL Server上执行该部分执行时,它正在将处理推送到客户端.我是在这里生活在幻想的土地还是有办法实现这一目标?

CMS*_*CMS 6

你可以使用Contains()

List<string> yourList = new List<string> { "A", "B", "C" };

var results = from x in x.table
              where yourList.Contains(x)
              select x;
Run Code Online (Sandbox Code Playgroud)

如果它是Linq to SQL,它将生成一个WHERE field IN ('A', 'B', 'C')子句.