[英]Build a linq query based on conditional values
我有很多人,每個人都在一個國家里。
我可以使用Entity Framework通過以下方式檢索澳大利亞的所有人:
var people = db.People.Where(x=>x.Country == "Australia")
我不確定該怎么做,是根據一組布爾值檢索X國家或Y國家中的人。
即:
bool USA = true;
bool Australia = false;
bool UK = true;
bool China = false;
我如何建立一個linq查詢,在這種情況下會給我:
var people = db.People.Where(x=>x.Country == "USA" || x.Country == "UK")
謝謝
您應該使用PredicateBuilder
:
var predicate = PredicateBuilder.False<People>();
if (USA)
predicate = predicate.Or(p => p.Country == "USA");
if (Australia)
predicate = predicate.Or(p => p.Country == "Australia");
// ...
var people = dp.People.Where(predicate);
PredicateBuilder
是正確的答案。 或者,您可以執行以下操作:
var countries = new List<string>();
if(USA) countries.Add("USA");
if(Australia) countries.Add("Australia");
if(UK) countries.Add("UK");
// ...
var people = dp.People.Where(x => countries.Contains(x.Country));
這將被轉換為WHERE IN
SQL子句
正如評論所指出的那樣,在Linq-To-Entities(或Linq-To-SQL)方案中,這沒關系,但是如果您打算將其用於Linq-To-Objects,則使用它會更明智。出於性能原因,使用HashSet<string>
代替List<string>
嘗試這個:
//You can add, remove or change filters
var tempDictionary = new Dictionary<string, bool>
{
{"USA", true},
{"Australia", false},
{"UK", true},
{"China", false},
};
//Get relevant filters
var tempFilter = tempDictionary
.Where(item => item.Value)
.Select(item => item.Key)
.ToArray();
var tempPeople = db
.People
.Where(x => tempFilter.Contains(x.Country));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.