我有一个泛型方法,应该返回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();
}
}
我在这里缺少一些东西吗?
答案 0 :(得分:2)
应用过滤器后,您未重新分配query
的值:
if (filter != null)
{
query.Where(filter);
}
应该是:
if (filter != null)
{
query = query.Where(filter);
}