![](/img/trans.png)
[英]Entity Framework Core LINQ query with multiple where clauses
[英]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.