Intereting Posts
Сортировка Порядок результатов для Select WITHOUT WHERE или ORDER BY Эквивалент управления транзакцией MongoDB Вход в SQL Server? Передача переменной в предложение IN в функции SQL? как определить дату, когда пакет обновления был применен к экземпляру SQL Server? Как получить строки, применяя несколько фильтров к одному столбцу в SQL Server 2008? Запрос на получение таблиц с индексацией в конкретной базе данных SQL-соединение не синхронизируется быстро, когда сетевой кабель отключен T-SQL Заменить узел XML Чувствительность к внешним ключам SQL Server 2008 На сколько возвращенных записей следует начинать ожидать проблем с производительностью? Как суммировать результаты выбора, который возвращает несколько строк CTE против нескольких вставок SQL SELECT несколько условий от многих до многих отношений Быстрый способ копирования строк из одной таблицы в другую Такая же функция окна в нескольких полях в T-SQL: оптимизация?

(EF 4.0 по сравнению с обычным SQL) Улучшение времени выполнения в Linq

Когда я выполняю этот оператор SQL, для запуска абсолютно нет времени:

select * from [user] left join licence on [user].userID = licence.UserID left join licenceProducts on licence.licenceID = licenceProducts.licenceID left join products on products.productID = licenceProducts.productID left join contacts on contacts.UserID = [user].userID left join usersupportedproducts on usersupportedproducts.UserID = [user].userID left join [user] b on b.userID = [user].ParentUserID where [user].Type <> 6 order by [user].name 

Однако, когда я запускаю тот же запрос с использованием EF 4.0, для выполнения требуется почти 20 секунд.

Есть ли способ улучшить этот запрос Linq, я попробовал?

 users = null; using (var db = new DistributorEntities()) { try { users = db.Users .Include(u => u.Licences) .Include(u => u.Licences.Select(l => l.LicenceProducts.Select(lp => lp.Product))) .Include(u => u.UserAddress) .Include(u => u.Contact) .Include(u => u.User2) .Include(u => u.SupportProducts) .Where(u => u.Type != (int)UserType.Admin) .OrderBy(u => u.Name) .ToList(); } catch (Exception ex) { if (ex is InvalidOperationException) { _EventLog.WriteEntry(ex.Message + " WebService.GetAllUsersAndChildren"); } exception = new ServiceError(ex); } } 

Я попытался выполнить ExecuteStoreQuery() , поставив свой оператор SQl, но не присоединился к отношениям users .

Solutions Collecting From Web of "(EF 4.0 по сравнению с обычным SQL) Улучшение времени выполнения в Linq"

Написание запросов непосредственно в SQL почти всегда более эффективно, чем запись выражений в LINQ, которые затем должны быть переведены на «субоптимальный» SQL.

То, что вы можете сделать, это просто создать VIEW , содержащий ваш запрос, а затем сопоставить это VIEW с Entity в Entity Framework, а затем запросить Entity который будет просто выполнять VIEW в SQL Server.

См. Также http://www.mssqltips.com/sqlservertip/1990/how-to-use-sql-server-views-with-the-entity-framework/ .