Linq 存储库和 GetTable()
我遵循相当标准的 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 通常这么糟糕吗?或者我错过了什么?
I'm following the fairly standard L2S repository pattern, using the following as one of the methods
public IEnumerable<T> GetAllByFilter(Func<T, bool> expression)
{
return _dataContext.GetTable<T>().Where(expression);
}
I'm a bit miffed to see that the call to GetTable
appears to literally get the table, with the Where
expression presumably evaluated in-memory afterwards.
So a simple call like
var order = GetAllByFilter(o => o.OrderNumber == 1);
which should only ever return one record, is fetching the entire 50000 record database.
Is Linq normally this bad? Or am I missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
更改
为:
这将使用
Queryable
(即SQL)而不是Enumerable
(即本地),因此性能会更好。Change:
To:
This will use
Queryable
(i.e. SQL) instead ofEnumerable
(i.e. local) and therefore will perform much better.