Как получить последние записи детей с родительской записью с EF - PullRequest
1 голос
/ 06 июня 2011

Я задал похожий вопрос, но на этот раз я хочу использовать Entity Framework.

У меня есть база данных с двумя таблицами: клиенты (Id PK, LastName, State и т. Д.) И заказы (Id PK, CustomerId FK, ProductName, цена и т.

Я хочу получить информацию только о последнем заказе клиента вместе с его именем. Я начал с:

var orders = from o in db.Orders
where o.Customer.State == "NY"
select o;
var lastOrders = orders.
Where(x => x.Customer.Orders.Where(y=>!y.IsCancelled).
OrderByDescending(z => z.Id).First().Id == x.Id);

Но я чувствую, что это может быть неэффективно.

1 Ответ

3 голосов
/ 06 июня 2011

Вы можете попробовать это:

var query = from c in db.Customers
            where c.State == "NY"
               && c.Orders.Any(o => !o.IsCancelled)
            select new { 
                Name = c.Name,
                Order = c.Orders.Where(o => !o.IsCancelled)
                                .OrderByDescending(o => o.Id).FirstOrDefault()
            };

var customersWithLastOrder = query.ToList();

Он предоставляет вам коллекцию анонимного типа, которая содержит имя и последний заказ клиента.

Редактировать

(Where(...).Count() > 0 заменено на Any(...), благодаря BritishDeveloper!)

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