Перепишите запрос 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.