人力资源查询SELECT distinct BH FROM cd  where (LB = '身份') AND (LM IN ('合同工','临时工'))

转换成Linq 是这样的:

如果sf是变量,是在程序中根据用户选择的条件临时添加的,sf可以为空,也可不为空,

在程序中定义sf,在程序中赋值为:sf="合同工","临时工"

var IDquery = from c in jtdc.CataLogDetails
where  (c.LB == "身份" && new string[] {sf}.Contains(c.LM))
select g.Key.BH;

如果用IDQuery查询的话就查询不出来,因为sf 在此是一个string 类型的变量,new string[] {sf},这个数组中的长度是1,而不是二,也就不会根据“合同工”和“临时工”来找,因此就没有查询结果。

因此只能用sf.split(',')产生数组来查询

所以正确的LINQ语句是:

var IDquery = from c in jtdc.CataLogDetails
where  (c.LB == "身份" && sf.Split(',').Contains(c.LM))
select g.Key.BH; Contains ()可以用来判断序列 是否存在指定的元素。 public static bool Contains <TSource>( this IEnumerable<TSource> source, TSource value ); 但是要注意此行为会根据元素是值类型还是引用类型而略有变化。 代码示例: public... 网上看到一个网友的微博有个题目: 题目简单:寻找数组1的元素在数组2对应的 下一个更大元素 .   给定两个 没有重复元素 的数组 nums1 和 nums2 ,其 nums1 是 nums2 的子集。找到 nums1 每个元素在 nums2 的下一个比其大的元素。 nums1 数字 x 的下一个更大元素是指 x 在 nums2 对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 . nums1 = [4,1,2], nums2 = [1,3,4,2]. 1、使用 Contains 方法的必备 条件 Contains 等价于SQL 的like语句。不过 Contains 只针对于字符串(string)类型的数据而言。如果是int等数值类型,则不会有 Contains 方法的存在,因此数值字段貌似无法通过使用Lambda表达式来完成like操作。因此在使用实体框架的同时,设计数据的时候如... .AsEnumerable()延迟执行,不会立即执行。当调用.AsEnumerable()的时候,实际上什么都没有发生。 .ToList()则是立即去执行 下面的两个实体类的多 条件 查询就是运用了先AsEnumerable,再ToList,这样可以直接执行一次,不然就去执行多次ToList using (var db = new DB()) //把要查询的ID按(xx,xx,xx)取出来。也就是说idlist的结果是(xx,xx) //Data是个集合,比如List string idlist = string.Join(",", Data.Select(d => d.ID).ToArray()); //一定要转成数据,否则 Contains 会把所有的查出来 va... var data = from px in db.vw_ygpx // orderby px.ygid descending select px; if (!string.IsNullOrEmpty(key)) { key = key.T...