Как построить запрос типа selectbyexample, используя linq-to-entity? - PullRequest
2 голосов
/ 02 декабря 2011

Как построить запрос типа selectbyexample, используя linq-to-entity?

Например:

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

Если бы у меня был новый Person () со всеми свойствами со значениямиnull, запрос должен вернуть мне все записи таблицы Person.

Но если я передам объект со свойством Age = 25, запрос должен вернуть мне все записи с age = 25;

Я хотел бы создать фильтр с одним запросом, чтобы принять любое из свойств, и если его игнорировать, то null.

Ответы [ 3 ]

1 голос
/ 02 декабря 2011
       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 возраст должен быть равен нулю (int? Вместо int).

1 голос
/ 02 декабря 2011

Прежде всего ваш пример не может иметь все свойства 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;
}
0 голосов
/ 02 декабря 2011

Вам нужен собственный метод Linq.Вот как вы можете это сделать:

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

Это может помочь вам в том, как динамически перебирать свойства вашего класса

c # - Как перебиратьчерез поля классов и набор свойств

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...