在用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();
请教我该如何封装重构这样类似的代码,求指点。求代码,求资源
这个其实很简单,有如下的代码例子:
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/
可以使用 泛型委托 以+=的形式 附加条件
最简单就是写一个扩展方法 比如这样
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);