[英]Conditional Where in Linq using query syntax
有沒有更好的方法讓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”。
我知道使用方法語法時,您可以簡單地保持將代碼追加到查詢中的不同行中,但是我更喜歡繼續使用查詢語法。
最簡單的方法是優化條件本身:
var doGroup=false;
var doSub=true;
var query=from mydata in Data_Details
where
(!doGroup || mydata.Group == "xxxx") &&
(!doSub || mydata.SubGroup == "yyyy")
select mydata;
您可以編寫一個擴展方法:
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")
Ruud Kobes的答案是正確的,這是不需要投影數據的小地方,不需要最后選擇。
var doGroup=false;
var doSub=true;
var query=from mydata in Data_Details
where
(!doGroup || mydata.Group == "xxxx") &&
(!doSub || mydata.SubGroup == "yyyy");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.