簡體   English   中英

使用查詢語法在Linq中有條件地

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM