2013-11-15 5 views
1

У меня есть общий метод, который должен возвращать IEnumerable из чего-либо. Кроме того, у пользователя есть возможность отфильтровать возвращаемый список. Проблема, с которой я сталкиваюсь, заключается в том, что этот список не фильтруется. Например, я пытаюсь получить список пользователей из базы данных; Я называю метод с использованием этого синтаксисаGeneric Repository GetAll Filter Не фильтрует

var users = unit.UserRepository.GetAll(x => x.UserName == username); 

Ожидалось, что один пользователь, но он возвращает всех пользователей в базе данных.

Вот мой общий метод:

public IEnumerable<TEntity> GetAll(Expression<Func<TEntity, bool>> filter =null, 
      Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderby = null, string property = "") 
     { 
      IQueryable<TEntity> query = dbSet; 
      if (filter != null) 
      { 
       query.Where(filter); 
      } 

      if (property != null) 
      { 
       foreach (var p in property.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
       { 
        query = query.Include(p); 
       } 
      } 

      if(orderby != null) 
      { 
       return orderby(query); 
      } else 
      { 
        return query.ToList(); 
      } 
     } 

там что-то, что я здесь отсутствует?

+0

Там, кажется, не будет ничего плохого в 'функции GetAll' , вы уверены, что есть данные в db, которые соответствуют критериям? – SOfanatic

ответ

2

Вы не переназначить значение query после применения фильтра:

if (filter != null) 
{ 
    query.Where(filter); 
} 

Должно быть:

if (filter != null) 
{ 
    query = query.Where(filter); 
} 
+1

спасибо. Я не заметил этого, и я смотрел на код с прошлой ночи. –

+0

@JosianeFerice Не проблема. Был там сам много раз. :) –