2017-04-20 53 views
0

一个非常简单的问题。我只是碰巧在练习LINQ,我想知道是否可以在LINQ的“where”部分输入条件? 例如c#我可以输入我想要在LINQ表达式中执行的代码

from a in myPerson 
where a.Age > 15 
select a; 

,然后我可以键入运行时我自己的条件。如果我想让这个年龄超过25岁,或者我想不是按年龄,而是按姓名过滤。因此,我将只需要输入

where a.Name == "John" 

不知是否可以做到的。

感谢任何帮助!

+1

也许你需要[Linq.Dynamic(https://www.nuget.org/packages/System.Linq.Dynamic/) –

+1

修改你的问题,以便这不是一个是/否的问题。 – Amy

回答

2

而不是在条件中对您的值进行硬编码,请使用变量。所以,你的情况可以使用不同的值运行

var age = //put your code for retrieving age 
from a in myPerson 
where a.Age > age 
select a; 
1

期间处理拨打的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(); 

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

2

您可以撰写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(); 
相关问题