Linq存储库和GetTable <t>()</t>

时间:2010-10-06 14:47:17

标签: sql linq-to-sql orm lambda lazy-loading

我正在遵循相当标准的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通常这么糟糕吗?或者我错过了什么?

1 个答案:

答案 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(即本地),因此效果会更好。