假设我有Customers表,我想通过以下方式对其进行过滤:
如果我必须为此过滤器构建一个SQL字符串,它将是这样的:
if (Country != "All") sql += "country = " + Country
if (Income != "All") sql += "and income = " + Income
if (Age != "All") sql += "and age = " + Age;
因此,基本上,用户可以按一些但不必要的所有字段进行过滤。
如何使用Entity Framework执行此操作?
谢谢!
答案 0 :(得分:19)
LINQ to Entity查询返回IQueryable
,因此您可以这样构建查询:
IQueryable<Person> query = context.People;
if (Country != "All")
{
query = query.Where(p => p.Country == Country);
}
if (Income != "All")
{
query = query.Where(p => p.Income == Income);
}
if (Age != "All")
{
query = query.Where(p => p.Age == Age);
}
List<Person> fetchedPeople = query.ToList();
这种情况太简单了,但在需要动态添加过滤的情况下,这在更复杂的情况下非常有用。
答案 1 :(得分:9)
您可以这样包含条件参数:
return Customers.Where(
customer =>
customer.Name == Name &&
(Age == "All" || customer.Age == Age) &&
(Income == "All" || customer.Income == Income) &&
(Country == "All" || customer.Country == Country)
).ToList();
如果某些条件为真(例如,country等于All
),则所有参数条件都为真,并且此参数不会过滤结果。