博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq的条件查询
阅读量:7111 次
发布时间:2019-06-28

本文共 2121 字,大约阅读时间需要 7 分钟。

其实我们经常用到.多条件查询名字等功能..如果有名字就查询这个名字.没有就是全部数据..

因为不能直接使用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().

 

转载于:https://www.cnblogs.com/cxd1008/p/6411045.html

你可能感兴趣的文章
Android电话系统之概述篇
查看>>
发现学习网站上的小错误
查看>>
opencart及其中国版mycncart系统安装后,商品图片所需注意事项
查看>>
nginx 学习笔记(2) nginx新手入门
查看>>
如何进行区块链的开发?
查看>>
Linux命令之bc - 浮点计算器、进制转换
查看>>
03 - C语言include和变量
查看>>
Sublime Text 学习笔记
查看>>
HTML 斜线 表头
查看>>
如何显示XShell的最大行数
查看>>
Android 签名出错
查看>>
Dao层系列-1-Hibernate上手
查看>>
spring cloud gateway 跨域设置
查看>>
javascript遍历json对象数据的方法
查看>>
Jaxb 完全手册
查看>>
Velocity Date format
查看>>
SVN修改用户名与密码
查看>>
Java集合-Collection详解
查看>>
moment.js 时间处理
查看>>
如何判断滚动条滚到页面底部并执行事件
查看>>