2012-05-03 4 views
0

Скажите, что у меня есть объект Customer и объект Sales, отношений 1-ко-многим. Как я могу получить всех клиентов с номером N самых последних продаж?Entity Framework Возьмите N элементов детской коллекции

var result = Customers.Where(c => c.Sales.Any()); 

Это вернет всех клиентов со всеми их продажами. Что делать, если я хочу всего 2 записи о продажах от каждого клиента?

P/S: Я могу сделать это с помощью синтаксиса запроса, я ищу синтаксическое решение метода. Я просто не могу понять, как приковать их вместе в методе синтаксической форме

var result = from cust in context.Customers 
      select new 
      { 
       Customers = cust, 
       Sales = cust.Sales.OrderBy(s => s.Date).Take(2) 
      }; 

Это работает, но я не уверен, если это лучший способ сделать это.

EDIT: ОК, выясняется, что синтаксис запроса, который я включил здесь, тоже не работает. Только Sales в анонимном типе эффективно сокращается до 2 записей.

var filtered = result.AsEnumerable().Select(r => r.Customers); 

делает это до сих пор приводит в список клиентов со всеми их продаж

+0

могли бы вы опубликовать запрос синтаксиса запроса? – Habib

+0

обновлен с кодом синтаксиса запроса – Kagawa

ответ

1

Вы можете сделать проект, как описано в here

var dbquery = Customers.Select(c => new { 
         Customer = c, 
         Sales = c.Sales.OrderBy(s => s.Date) 
          .Take(2).Select(s => new { s, s.SalesDetails}) 
        }); 

var customers = dbquery 
    .AsEnumerable() 
    .Select(c => c.Customer); 
+0

просто добавьте предложение where для c.Sales.Any() – Habib

+0

это все еще возвращает мне клиентов со всеми включенными продажами :( – Kagawa

+0

@Taetsu Отключить ленивую загрузку, прежде чем вы получите доступ к свойству «Sales», установив «контекст» .Configuration.LazyLoadingEnabled = false; ' – Eranga

Смежные вопросы