如果用in是字符串类型无问题,可以直接这样用
var result = SNFService.Instance.ModuleService.GetList(UserInfo).Where(entity => entity.DeletionStateCode == 0 ).Where(entity => urls.Contains((entity.NavigateUrl == null ? "" : entity.NavigateUrl).ToLower())).OrderBy(entity => entity.SortCode).ToList();
如果是数值类型需要按如下处理:
熟悉LINQ的朋友也许会碰到标题的问题,且很自然地想起使用下面地语句实现:
然而,运行发现系统会抛出如下异常:
LINQ to Entities 不识别方法“Boolean Contains(Int32)”,因此该方法无法转换为存储表达式。
究其原因,是Contains是IList类型的扩展方法而linq无法转换过来。所以上述办法就无法得到我们想要的结果(虽然编译不会有错)。
但可喜的是可以使用string类型的扩展方法Contains;当然这里需要在原表增加计算字段
而获取数据的Linq查询语句就可以这样实现:
上面语句运行时,LINQ To Entities会将其翻译为如下SQL语句:
LINQ中in的实现方法-LINQ To Entities如何实现查询 select * from tableA where id in (1,2,3,4)
原文:http://www.cnblogs.com/spring_wang/p/4098332.html