一個非常簡單的問題。我只是碰巧在練習LINQ,我想知道是否可以在LINQ的「where」部分輸入條件? 例如c#我可以輸入我想要在LINQ表達式中執行的代碼
from a in myPerson
where a.Age > 15
select a;
,然後我可以鍵入運行時我自己的條件。如果我想讓這個年齡超過25歲,或者我想不是按年齡,而是按姓名過濾。因此,我將只需要輸入
where a.Name == "John"
不知是否可以做到的。
感謝任何幫助!
一個非常簡單的問題。我只是碰巧在練習LINQ,我想知道是否可以在LINQ的「where」部分輸入條件? 例如c#我可以輸入我想要在LINQ表達式中執行的代碼
from a in myPerson
where a.Age > 15
select a;
,然後我可以鍵入運行時我自己的條件。如果我想讓這個年齡超過25歲,或者我想不是按年齡,而是按姓名過濾。因此,我將只需要輸入
where a.Name == "John"
不知是否可以做到的。
感謝任何幫助!
而不是在條件中對您的值進行硬編碼,請使用變量。所以,你的情況可以使用不同的值運行
var age = //put your code for retrieving age
from a in myPerson
where a.Age > age
select a;
期間處理撥打的IQueryable
var ageConditiion = 15;
var originQuery = from a in myPerson select a;
var result1 = originQuery.Where(a => a.Age > ageConditiion).ToList();
var result2 = originQuery.Where(a => a.Name == "John").ToList();
可查詢不會發送到數據庫的任何請求。
您可以撰寫IQueryables。根據需要,只是追加額外Where
,OrderBy
等條款:
// passed as parameters
int age;
string name;
bool sortByName;
var persons = _dbContext.Person;
// always filter by Age
var result = persons.Where(p => p.Age > age);
// additionally filter by Name if some condition is met
if (age > 25) {
result = result.Where(p => p.Name == name);
}
// sort depending on parameter
if (sortByName) {
result = result.OrderBy(p => p.Name);
}
else {
result = result.OrderBy(p => p.Age);
}
// query will be executed when you enumerate the IQueryable
return result.ToArray();
也許你需要[Linq.Dynamic(https://www.nuget.org/packages/System.Linq.Dynamic/) –
修改你的問題,以便這不是一個是/否的問題。 – Amy