Я скомпилировал запросы как для основного объекта customer
, так и для связанных объектов (заказов).Производительность - получить данные через свойство навигации vs скомпилированный запрос
var customer = MyService.GetCustomer<Customer>().where(c => c.Id == fooId).ToList();
var customerOrders = MyService.GetOrders<Order>().where(o => o.CustomerId == fooId && o.IsActive).ToList();
Но я думаю, что я могу получить все заказы через навигационные свойства вместо скомпилированного запроса вызовов, так как customer
уже загружена в память, код ниже:
var customerOrders = customer.Orders.where(o => o.IsActive).ToList(); // I didn't do filter further more
Но когда я измеряю тайминги я не мог (ДБ имеет 500 клиентов и 4000 заказов, а у каждого конкретного клиента 30 активных заказов и около 400 неактивных заказов).
Какой из этих двух будет иметь лучшую производительность?
я не мог полностью понять это related question
Так что запрос свойства навигации лучше, чем выполненный запрос в этом случае? – ManirajSS
Я не полностью понимаю, что вы подразумеваете под скомпилированным запросом. Однако Linq to Entities предоставляет лишь небольшое количество поддерживаемых функций. Если вы превысите те, которые потребуются для получения большего объема данных из базы данных, тогда выполните вычисления и возможное сокращение с полными данными, которые затем снижают производительность. Посмотрите здесь https://msdn.microsoft.com/en-us/library/bb738550.aspx –
, например, если вы используете некоторое Regex для фильтрации ваших данных, которые вам нужно будет вызвать, например .ToList() или .AsEnumerable (), который отправит SQL-запрос в базу данных и скопирует набор результатов в объекты. Затем вы можете использовать Linq для объектов для фильтрации на основе Regex –