我正在遵循相当标准的L2S存储库模式,使用以下方法作为方法之一
public IEnumerable<T> GetAllByFilter(Func<T, bool> expression)
{
return _dataContext.GetTable<T>().Where(expression);
}
我有点恼火,看到对GetTable
的调用似乎真的得到了表格,Where
表达式可能会在内存中进行评估。
这是一个简单的调用,如
var order = GetAllByFilter(o => o.OrderNumber == 1);
才能获取整个50000记录数据库。
Linq通常这么糟糕吗?或者我错过了什么?
答案 0 :(得分:4)
变化:
public IEnumerable<T> GetAllByFilter(Func<T, bool> expression)
{
return _dataContext.GetTable<T>().Where(expression);
}
要:
public IQueryable<T> GetAllByFilter(Expression<Func<T, bool>> expression)
{
return _dataContext.GetTable<T>().Where(expression);
}
这将使用Queryable
(即SQL)而不是Enumerable
(即本地),因此效果会更好。