我为语法错误道歉,这是我对问题的简单解释。
我已经设置了我的dbml文件,其中包含CustomerId上的客户和订单之间的关系。 我正在尝试退还少于10美元的客户的所有订单。
Customer customer = context.Customers.FirstOrDefault(c => c.Id == 123);
IEnumerable<Order> orders = customer.Orders.Where(o => o.Total < 10);
这需要永远,因为当枚举订单时,生成的sql忽略where子句,提取1000个记录,然后在内存中根据where子句筛选出订单。
如何设置它以便生成一个过滤服务器订单的查询?
答案 0 :(得分:2)
这将被翻译成您期望的SQL:
var qry = from o in context.Orders
where o.CustomerId == 123
&& o.Total < 10
select o;
(编辑)
查看我的日志后,我可以看到为您的代码生成的SQL也是我所期望的,并且过滤是在使用SQL的数据库中完成的。因此,订单并非全部加载。您是否更改了数据上下文中的任何选项,例如DeferredLoadingEnabled
或提供了LoadOptions
?