1

我有一个为我的所有存储库实现的抽象类 - 在其中我有一个返回集合的属性:

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不是我想要做的事情。

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

4

1 回答 1

4

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

public IEnumerable<T> GetSelection(Expression<Func<T, Boolean>> predicate)
{
    return _dbSet.Where(where);
}
于 2013-04-09T13:30:09.443 回答