小编典典

Linq存储库和GetTable()

sql

我遵循相当标准的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通常这么不好吗?还是我错过了什么?


阅读 143

收藏
2021-04-22

共1个答案

小编典典

改变:

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(即本地),因此性能会更好。

2021-04-22