在LINQ中是否有一种更好的方式来使条件where子句等效于以下内容?
var doGroup=false;
var doSub=true;
var query= from mydata in Data_Details
where
((doGroup && mydata.Group == "xxxx") || (doGroup==false)) &&
((doSub && mydata.SubGroup == "yyyy") || (doSub==false))
select mydata;
在上面的代码中,根据doGroup和doSub是否为true,它可以选择包含“ Group”和“ SubGroup”。
我知道使用方法语法时,您可以简单地保持将代码追加到查询中的不同行中,但是我更喜欢继续使用查询语法。
答案 0 :(得分:3)
最简单的方法是优化条件本身
var doGroup=false;
var doSub=true;
var query=from mydata in Data_Details
where
(!doGroup || mydata.Group == "xxxx") &&
(!doSub || mydata.SubGroup == "yyyy")
select mydata;
答案 1 :(得分:0)
您可以编写扩展方法:
public static IQueryable<T> WhereIf<T>(
this IQueryable<T> source, bool condition,
Expression<Func<T, bool>> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
用法:
var doGroup =false;
var doSub = true;
var query = Data_Details
.WhereIf(doGroup, q => q.Group == "xxxx")
.WhereIf(doSub, e => e.SubGroup == "yyyy")
答案 2 :(得分:0)
Ruud Kobes的答案是正确的, 一小点,不需要投影数据, 不需要最后选择。
var doGroup=false;
var doSub=true;
var query=from mydata in Data_Details
where
(!doGroup || mydata.Group == "xxxx") &&
(!doSub || mydata.SubGroup == "yyyy");