从以下LINQ查询开始:
from a in things
where a.Id == b.Id &&
a.Name == b.Name &&
a.Value1 == b.Value1 &&
a.Value2 == b.Value2 &&
a.Value3 == b.Value3
select a;
Run Code Online (Sandbox Code Playgroud)
如何删除(在运行时)where子句中的一个或多个条件,以获取类似于以下的查询:
from a in things
where a.Id == b.Id &&
a.Name == b.Name &&
a.Value2 == b.Value2 &&
a.Value3 == b.Value3
select a;
Run Code Online (Sandbox Code Playgroud)
要么
from a in things
where
a.Name == b.Name &&
a.Value3 == b.Value3
select a;
Run Code Online (Sandbox Code Playgroud)
我不是试图改变现有的where子句,而是将其重构为:
from a in things
where a.Id == b.Id
where a.Name == b.Name
where a.Value1 == b.Value1
where a.Value2 == b.Value2
where a.Value3 == b.Value3
select a;
Run Code Online (Sandbox Code Playgroud)
然后变成:
things.Where(a => a.Id == b.Id)
.Where(a => a.Name == b.Name)
.Where(a => a.Value1 == b.Value1)
.Where(a => a.Value2 == b.Value2)
.Where(a => a.Value1 == b.Value3);
Run Code Online (Sandbox Code Playgroud)
现在应该相当清楚如何继续 - 将调用条件化为Where:
IQueryable<Whatever> query = things;
if (useId) {
query = query.Where(a => a.Id == b.Id);
}
query = query.Where(a => a.Name == b.Name);
if (checkValue1) {
query = query.Where(a => a.Value1 == b.Value1);
}
// etc
Run Code Online (Sandbox Code Playgroud)