首页 新闻 会员 周边

linq如何实现动态条件查询

0
悬赏园豆:20 [已解决问题] 解决于 2015-12-03 14:58
在用linq写代码中,经常遇到多条件查询:写了很多if else 的丑陋代码,如下所示:
  var query = db.User.AsQueryable();
   2: if (string.IsNullOrEmpty(name))
   3:     query = query.Where(c => c.Name == name);
   4: if (id.HasValue)
   5:     query = query.Where(c => c.Id == id);
   6: if (string.IsNullOrEmpty(email))
   7:     query = query.Where(c => c.Email == email);
   8: return query.ToList();
请教我该如何封装重构这样类似的代码,求指点。求代码,求资源
隔壁老王来了的主页 隔壁老王来了 | 初学一级 | 园豆:99
提问于:2015-11-06 23:08
< >
分享
最佳答案
0

这个其实很简单,有如下的代码例子:

var query = from item in CM_BookPageDetails
            select item;
    
    foreach(var filter in filters)
        query = query.Where(filter);
    
    return query.Take(10);

完整实现可以参照我的博问 http://q.cnblogs.com/q/73479/

收获园豆:20
空明流光 | 初学一级 |园豆:106 | 2015-11-07 13:10
其他回答(2)
0

可以使用  泛型委托  以+=的形式 附加条件

流星霜紫 | 园豆:473 (菜鸟二级) | 2015-11-07 10:10
0

最简单就是写一个扩展方法 比如这样 

WhereWhen(this,a,b)

{

   if(a)

  this.Where(b)

  return this

}

 

query.WhereWhen(string.IsNullOrEmpty(name) , c => c.Name == name)

  .Where(id.HasValue, c => c.Id == id);

victor.x.qu | 园豆:20 (初学一级) | 2015-11-07 12:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册