EF 4.1 Стремление загрузить первые 5 дочерних записей возможно? - PullRequest
2 голосов
/ 18 июня 2011

Использование EF 4.1 У меня есть модель (клиент со связанными покупками), и я хочу создать краткую обзорную страницу, показывающую клиентов и их последние 5 покупок. Есть ли способ создать поиск, используя EF 4.1, где я получаю, скажем, все клиенты с именем 'bret и использую готовую загрузку, чтобы загружать только свои последние 5 покупок? Я понимаю, что ef 4.1 поддерживает активную загрузку с использованием include, но вы можете указать лимит для заказа на?

1 Ответ

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

Нет, вы не можете указать лимит для нетерпеливой загрузки.Вы можете сделать это только в явной загрузке для одного клиента:

var customer = context.Customers.Where(c => c.Id == customerId);
context.Entry(customer)
       .Collection(c => c.Purchases)
       .Query()
       .OrderByDescending(p => p.Date)
       .Take(5)
       .Load();

Если вы хотите сделать это для нескольких клиентов в одном запросе, вы должны использовать проекцию:

var query = context.Customers
                   .Select(c => new {
                        Customer = c,
                        Purchases = c.Purchases.OrderByDescending(p => p.Date).Take(5)
                    });

Имейте в виду, чтоВы должны проецировать на пользовательский или анонимный тип.Вы не можете проецировать обратно в Customer класс.

...