其实我们经常用到.多条件查询名字等功能..如果有名字就查询这个名字.没有就是全部数据..
因为不能直接使用tolist()会读取到数据库数据..正常查询时候 为了不直接读取数据库.只是先留个空壳.我们会这么写.
1 var TasksPL = from ta in db.JF_Tasks select ta; 2 if (EMRealName != null) 3 { 4 TasksPL = TasksPL.Where(s => s.Executor == EMRealName || s.TestEmployee == EMRealName || s.DemandEmployee == EMRealName); 5 6 } 7 if (!string.IsNullOrEmpty(FinishStatus)) 8 { 9 TasksPL = TasksPL.Where(s => s.FinishStatus == FinishStatus); 10 11 } 12 if (!string.IsNullOrEmpty(TaskNeeds)) 13 { 14 TasksPL = TasksPL.Where(s => s.TaskNeeds.Contains(TaskNeeds)); 15 }
这也是我用了很久的方法..
直到今天.我就想Linq难到没有自己的方法吗..我就各种查询...找到了
var TasksPL = db.JF_Tasks.AsQueryable();
var TasksPL2 = db.JF_Tasks.AsEnumerable();
这两种写法...然后..又百度了一下.这两个方法的区别.IQueryable实现了IEnumberable接口。但IEnumerable<T> 换成IQueryable<T>后速度提高很多。原因:
IQueryable接口与IEnumberable接口的区别: IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
非常高兴.经过测试之后发现.200条数据...AsQueryable()方法.比原来最初写的lambda方法.速度快了100多倍...以后终于可以这么写了:
1 var TasksPL = db.JF_Tasks.AsQueryable(); 2 //var TasksPL = from ta in db.JF_Tasks select ta; 3 if (!string.IsNullOrEmpty(sTime) && !string.IsNullOrEmpty(eTime)) 4 { 5 DateTime dsTime = Convert.ToDateTime(sTime); 6 DateTime deTime = Convert.ToDateTime(eTime).AddDays(1); 7 TasksPL = TasksPL.Where(s => s.CreatedOn >= dsTime && s.CreatedOn <= deTime); 8 } 9 if (EMRealName != null) 10 { 11 TasksPL = TasksPL.Where(s => s.Executor == EMRealName || s.TestEmployee == EMRealName || s.DemandEmployee == EMRealName); 12 } 13 if (!string.IsNullOrEmpty(FinishStatus)) 14 { 15 TasksPL = TasksPL.Where(s => s.FinishStatus == FinishStatus); 16 } 17 if (!string.IsNullOrEmpty(TaskNeeds)) 18 { 19 TasksPL = TasksPL.Where(s => s.TaskNeeds.Contains(TaskNeeds)); 20 }
最后使用的时候在ToList().
本文为博主原创文章,欢迎转载,但转载须注在明显位置注明【博客地址】和【原文地址】,否则将追究法律责任。http://www.cnblogs.com/cxd1008