簡體   English   中英

實體框架 Linq 使用多個 where 查詢

[英]Entity Framework Linq Query using multiple where

multiple.Where() 是作為 AND (&&) 還是作為 Or (||) 例如:

 var db = new myContext();
 var query = db.User.Where(u => u.Gender == "Male");
 query = query.Where(u => u.IsActive == true);

是否等同於:

   Select *
   from user
   where gender = 'Male' 
     and IsActive = true;

您將一個過濾器的結果傳遞給另一個過濾器,因此從邏輯上講,它們將像“和”一樣。

假設你有一副牌。 然后,您使用只給您紅牌的“過濾器”。 然后,您希望將結果傳遞給另一個過濾器,該過濾器只為您提供七人制。

因此,您有效地獲得了紅色且價值為 7 的卡片。

有沒有辦法改變這種行為並使其充當“或”?

不,沒有辦法獲取具有Where子句的查詢並“附加”第二個Where子句,其作用類似於or

如果您嘗試使用“或”操作動態 append 過濾器,最直接的方法是將兩個謂詞與“或”組合(請參閱Linq Where() Z945F3FC449518A73B9F5F32 中的“或”等效項

另一種方法是重新使用原始查詢,使用兩個單獨Where查詢,然后Union結果。

var result1 = a.Where(u => u.Gender == "Male");
var result2 = a.Where(u => u.IsActive == true);

var result = result1.Union(result2);

但是這種“間接” OR 子句可能存在性能問題

只需使用&&運算符:

var query = db.User.Where(u => u.Gender == "Male" && u.IsActive == true);

&&運算符表示and 上面的條件可以理解為get all users with gender=="Male" 和 isActive=="true"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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