Перепишите запрос LinqToSql, чтобы он возвращал те же экземпляры без LoadWith

Я исследую производительность CompiledQuery, но у CompiledQuery есть аллергия на LoadWith.

using (CustomDataContext myDC = new CustomDataContext())
{
  DataLoadOptions options = new DataLoadOptions();
  options.LoadWith<Customer>(c => c.Orders)
  myDC.LoadOptions = options;

  IQueryable<Customer> query = myDC.Customers.Where(filterExpr);
  List<Customer> result = query.ToList();
  return result;
}

Этот код заполняет свойство Orders каждого экземпляра Customer, загруженного с помощью запроса sql левого соединения. Как можно переписать запрос без LoadWith, чтобы получить тот же результат (Клиенты заполнили свойство Orders)?

1 ответ

Решение

Я нашел способ использовать DataLoadOptions с CompiledQuery. http://www.mrkwatkins.co.uk/Blog/2010/05/16/Improving-LINQ-To-SQL-Performance-Part-2---Combining-Compiled-Queries-And-Load-Options

Он включает в себя наличие экземпляра DataLoadOptions, доступного во время компиляции, удержание этого экземпляра DataLoadOptions в течение всего времени существования экземпляра CompiledQuery и обмен этой DataLoadOption на и без места при каждом запуске CompiledQuery.

Другие вопросы по тегам