我有一个如下所示的查询:

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。

其他提示

您可能想研究使用编译查询

看一下 http://www.3devs.com/?p=3

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top