【问题标题】:Generic Repository GetAll Filter Does not filter通用存储库 GetAll 过滤器 不过滤
【发布时间】:2013-11-16 02:12:37
【问题描述】:

我有一个通用方法,它应该返回任何东西的 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();
             }
         }

这里有什么我遗漏的吗?

【问题讨论】:

  • GetAll函数似乎没有什么问题,你确定db中有符合条件的数据吗?

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


【解决方案1】:

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

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

应该是:

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

【讨论】:

  • 谢谢。没注意到,从昨晚开始就一直在看代码。
  • @JosianeFerice 没问题。我自己去过那里很多次。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多