优化 LINQ to SQL 查询
-
09-06-2019 - |
题
我有一个如下所示的查询:
public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
DatabaseDataContext db = new DatabaseDataContext();
return (from o in db.Orders
orderby o.CreatedDate descending
select o)
.Skip(pageIndex * recordCount)
.Take(recordCount)
.ToList();
}
我需要打印订单和创建它的用户的信息:
foreach (var o in FetchLatestOrders(0, 10))
{
Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}
这会生成一个 SQL 查询来带来订单,并为每个订单产生一个查询来带给客户。是否可以优化查询,以便将订单及其客户包含在一个 SQL 查询中?
谢谢
UDP日期:根据 Sirrocco 的建议,我像这样更改了查询并且它有效。仅生成一个选择查询:
public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
var options = new DataLoadOptions();
options.LoadWith<Post>(o => o.Customer);
using (var db = new DatabaseDataContext())
{
db.LoadOptions = options;
return (from o in db.Orders
orderby o.CreatedDate descending
select o)
.Skip(pageIndex * recordCount)
.Take(recordCount)
.ToList();
}
}
谢谢西罗科。
解决方案
您还可以做的其他事情是 EagerLoading。在 Linq2SQL 中,您可以使用 LoadOptions : 有关加载选项的更多信息L2S 的一个非常奇怪的事情是,您只能在第一个查询发送到数据库之前设置 LoadOptions。
其他提示
您可能想研究使用编译查询
不隶属于 StackOverflow