C#我可以在Linq Expressions中输入要执行的代码



一个非常简单的问题。我现在碰巧正在练习Linq,我想知道我是否可以在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;

您可以组成iQueryables。只需根据需要附加其他WhereOrderBy等条款:

// 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();

制作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();

可查询不会将任何请求发送到数据库。

最新更新