实体框架5,在过滤结果之前返回整个数据集

本文关键字:返回 数据集 结果 框架 过滤 实体 | 更新日期: 2023-09-27 18:08:19

我有一个抽象类,它实现了我所有的存储库-在那里我有一个属性,返回一个集合:

protected readonly IDbSet<T> _dbSet;
public virtual IEnumerable<T> GetSelection(Func<T, bool> where)
{
    return _dbSet.Where(where);
}
回购:

public class PostcodeDataRepository : EntityRepositoryBase<PostcodeData>, IPostcodeDataRepository
{
    // Constructor in here
}

现在这个工作很好:

var postcodeData = postcodeRespoistory.GetSelection(x=>x.Postcode == "SW1A 2TT");

(是的,这是英国邮政编码数据,是的,表中有近200万行)

这工作得很好,但我的问题是返回所有的数据只供应用程序然后过滤,这会导致一些性能问题(如你所料!)。我使用MiniProfiler和EFProf来确认它正在有效地执行select * from PostcodeData,这不是我想要它做的。

有谁知道我该如何解决这个问题吗?

实体框架5,在过滤结果之前返回整个数据集

您需要使用Expression<Func<TSource, bool>>谓词:

public IEnumerable<T> GetSelection(Expression<Func<T, Boolean>> predicate)
{
    return _dbSet.Where(where);
}