Оптимизация запроса LINQ к 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-запросе?
Спасибо
УДПАТИРОВАТЬ:По предложению sirrocco я изменил запрос следующим образом, и он работает.Генерируется только один запрос select:
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