Linq的条件查询

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

因为不能直接使用tolist()会读取到数据库数据..正常查询时候 为了不直接读取数据库.只是先留个空壳.我们会这么写.

var TasksPL = from ta in db.JF_Tasks select ta;
if (EMRealName != null)
            {
                TasksPL = TasksPL.Where(s => s.Executor == EMRealName || s.TestEmployee == EMRealName || s.DemandEmployee == EMRealName);
              
            }
            if (!string.IsNullOrEmpty(FinishStatus))
            {
                TasksPL = TasksPL.Where(s => s.FinishStatus == FinishStatus);
               
            }
            if (!string.IsNullOrEmpty(TaskNeeds))
            {
                TasksPL = TasksPL.Where(s => s.TaskNeeds.Contains(TaskNeeds));             
            }

这也是我用了很久的方法..

直到今天.我就想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多倍...以后终于可以这么写了:

var TasksPL = db.JF_Tasks.AsQueryable();       
//var TasksPL = from ta in db.JF_Tasks select ta;          
if (!string.IsNullOrEmpty(sTime) && !string.IsNullOrEmpty(eTime))
{
      DateTime dsTime = Convert.ToDateTime(sTime);
      DateTime deTime = Convert.ToDateTime(eTime).AddDays(1);
      TasksPL = TasksPL.Where(s => s.CreatedOn >= dsTime && s.CreatedOn <= deTime);               
}
if (EMRealName != null)
{
      TasksPL = TasksPL.Where(s => s.Executor == EMRealName || s.TestEmployee == EMRealName || s.DemandEmployee == EMRealName);              
}
if (!string.IsNullOrEmpty(FinishStatus))
{
      TasksPL = TasksPL.Where(s => s.FinishStatus == FinishStatus);
}
if (!string.IsNullOrEmpty(TaskNeeds))
{
      TasksPL = TasksPL.Where(s => s.TaskNeeds.Contains(TaskNeeds));             
}
最后使用的时候在ToList().

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值