我遵循相当标准的L2S储存库模式,将以下内容用作方法之一
public IEnumerable<T> GetAllByFilter(Func<T, bool> expression) { return _dataContext.GetTable<T>().Where(expression); }
我有点不高兴看到对的调用GetTable似乎是从字面上获取表,并且该Where表达式大概是在内存中求值的。
GetTable
Where
像这样一个简单的电话
var order = GetAllByFilter(o => o.OrderNumber == 1);
只能返回一条记录的记录正在获取整个50000条记录数据库。
Linq通常这么不好吗?还是我错过了什么?
改变:
到:
public IQueryable<T> GetAllByFilter(Expression<Func<T, bool>> expression) { return _dataContext.GetTable<T>().Where(expression); }
这将使用Queryable(即SQL)而不是Enumerable(即本地),因此性能会更好。
Queryable
Enumerable