如何使用linq-to-entities构建类似selectbyexample的查询?

时间:2011-12-02 11:03:45

标签: c# linq entity-framework linq-to-entities

如何使用linq-to-entities构建类似selectbyexample的查询?

例如:

public class Person
{
      public string Name {get; set;}
      public int Age {get; set;}
      public string City {get; set;}
}

如果我有一个新的Person(),其值为null的所有属性,查询应该返回Person表的所有记录。

但是如果我传递一个具有Age = 25属性的对象,查询应该返回所有年龄= 25的记录;

我想构建一个单独的查询过滤器来接受任何属性,如果有人将其忽略为null。

3 个答案:

答案 0 :(得分:1)

首先,您的示例不能将所有属性设为null,因为Age不可为空。

无论如何,这样做是这样的:

public static IQueryable<Person> QueryByExample(Person example, YourContext context)
{
    var query = context.Persons;

    if (example.Name != null) 
    {
       string name = example.Name;
       query = query.Where(p => p.Name == name);
    }

    // Same for other properties

    return query;
}

答案 1 :(得分:1)

       var p = new Person {Age = 25};

       src.Where(el => p.Age == null ? true : el.Age == p.Age)
           .Where(el => p.Name == null ? true : el.Name == p.Name)
           .Where(el => p.City == null ? true : el.City == p.City);
在你的Person类中,Age应该可以为空(int?而不是int)。

答案 2 :(得分:0)

您需要自定义Linq方法。以下是如何做到这一点:

http://msdn.microsoft.com/en-us/library/cc981895.aspx

这可以帮助您了解如何动态迭代您的类属性

c# - How to iterate through classes fields and set properties