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

时间:2013-04-09 13:21:17

标签: c# entity-framework-5

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

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");

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

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

有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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

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