人力资源查询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...