通用存储库GetAll过滤器不过滤

时间:2013-11-15 16:38:59

标签: c# asp.net-mvc-3 asp.net-mvc-4 generics

我有一个泛型方法,应该返回IEnumerable的任何东西。此外,用户可以选择过滤掉返回列表。我遇到的问题是列表没有被过滤。例如,我试图从数据库中获取用户列表;我使用这种语法调用方法

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();
             }
         }

我在这里缺少一些东西吗?

1 个答案:

答案 0 :(得分:2)

应用过滤器后,您未重新分配query的值:

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

应该是:

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