实体框架:条件过滤器

时间:2012-07-13 07:11:43

标签: entity-framework c#-4.0

假设我有Customers表,我想通过以下方式对其进行过滤:

  • 国家:全部,美国,英国,加拿大
  • 收入:全部,低,高,中等
  • 年龄:全部,青少年,成年人,大四

如果我必须为此过滤器构建一个SQL字符串,它将是这样的:

if (Country != "All") sql += "country = " + Country
if (Income != "All") sql += "and income = " + Income
if (Age != "All") sql += "and age = " + Age;

因此,基本上,用户可以按一些但不必要的所有字段进行过滤。

如何使用Entity Framework执行此操作?

谢谢!

2 个答案:

答案 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),则所有参数条件都为真,并且此参数不会过滤结果。