Оптимизация запроса LINQ to SQL - PullRequest
7 голосов
/ 08 сентября 2008

У меня есть запрос, который выглядит так:

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-запросе?

Спасибо

UDPATE: По предложению 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();
    }
}

Спасибо, сирокко.

Ответы [ 2 ]

4 голосов
/ 08 сентября 2008

Что-то еще, что вы можете сделать, это EagerLoading. В Linq2SQL вы можете использовать LoadOptions: Подробнее о LoadOptions Одна ОЧЕНЬ странная вещь в L2S состоит в том, что вы можете установить LoadOptions только перед отправкой первого запроса в базу данных.

0 голосов
/ 08 сентября 2008

вы можете захотеть посмотреть с помощью скомпилированных запросов

взгляните на http://www.3devs.com/?p=3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...