我正在写一个Linq查询。有没有一种方法可以根据一些if条件连接查询?
就像查询一样
from res in _db.Person
where res.Departments.ID == deptId
select res;
如果我的条件是真的,我希望它像
from res in _db.Person
where res.Departments.ID == deptId && res.Departments.Type == deptType
select res;
答案 0 :(得分:5)
使用扩展方法语法多次调用Where
,实现“AND”类型条件很容易 - 而且更容易:
IQueryable<Person> people = _db.Person
.Where(res => res.Departments.ID == deptId);
if (deptType != null)
{
people = people.Where(res => res.Departments.Type == deptType);
}
// Potentially add projections etc.
编辑:如果你想要“OR”功能,从头开始有点棘手,因为你需要搞乱表达树。我建议你使用PredicateBuilder
库:
Expression<Func<Person, bool> predicate = res => res.Departments.ID == deptId;
if (deptType != null)
{
predicate = predicate.Or(res => res.Departments.Type == deptType);
}
IQueryable<Person> people = _db.Person.Where(predicate);
答案 1 :(得分:3)
假设您的情况处于可变状态
from res in _db.Person
where res.Departments.ID == deptId && (!condition || res.Departments.Type == deptType)
select res;
执行或按要求的版本
from res in _db.Person
where res.Departments.ID == deptId || (condition && res.Departments.Type == deptType))
select res;
或者,您可以使用predicate builder
答案 2 :(得分:1)
我会做这样的事情:
var result = _db.Person.Where(x=>x.Departments.ID == deptId);
if(myCondition)
result = result.Where(x=>x.Departments.Type == deptType);
在您尝试枚举result
之前,查询实际上并未执行,因此您可以根据需要继续添加条件。