Как правильно фильтровать дочерние объекты? - PullRequest
1 голос
/ 27 октября 2009

Я прошу прощения за синтаксические ошибки, это мое простое объяснение проблемы.

Я настроил свой dbml-файл с отношениями между клиентами и заказами в CustomerId. Я пытаюсь вернуть все заказы для клиента стоимостью менее $ 10.

Customer customer = context.Customers.FirstOrDefault(c => c.Id == 123);
IEnumerable<Order> orders = customer.Orders.Where(o => o.Total < 10);

Это происходит навсегда, потому что при перечислении заказов генерируется sql, игнорирующий предложение where, извлекает тысячи записей и затем в памяти отфильтровывает заказы на основе предложения where.

Как мне это настроить, чтобы он генерировал запрос, который фильтрует заказы на сервере?

1 Ответ

2 голосов
/ 27 октября 2009

Это будет переведено в ожидаемый SQL:

var qry = from o in context.Orders
          where o.CustomerId == 123 
                && o.Total < 10
          select o;

(редактирование)

После просмотра моего журнала я вижу, что сгенерированный SQL для вашего кода - это то, что я ожидал, и фильтрация выполняется в базе данных с помощью SQL. Итак, заказы не все загружены. Изменили ли вы какие-либо параметры в контексте данных, например DeferredLoadingEnabled, или указали LoadOptions?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...