Как выбрать конкретное количество дочерних объектов вместо всех в рамках структуры 3.5? - PullRequest
1 голос
/ 18 июня 2010

Мне интересно, как я могу выбрать определенное количество дочерних объектов вместо того, чтобы брать их все с помощью include?

Допустим, у меня есть объект «Группа», и мне нужно выбрать последних десяти учеников, которые присоединились к группе.

Когда я использую '.Include ("Студенты"), EF включает всех студентов.Я пытался использовать Take (10), но я довольно плохо знаком с EF и программированием, так что я не мог понять это.Какие-либо предложения?

ОБНОВЛЕНО:

хорошо, у меня есть объект группы, уже полученный из БД, как это:

Group group = db.Groups.FirstOrDefault(x=>x.GroupId == id)

Я знаючто я могу добавить заявление Include("Students"), но это принесет ВСЕХ студентов, и их число может быть довольно большим, если мне нужны только самые свежие 10 студентов.Могу ли я сделать что-то вроде этого: var groupWithStudents = group.Students.OrderByDescending(//...).Take(10);?

Проблема в том, что Take <> больше не отображается в intellisense.Это достаточно ясно?Спасибо за ответы

Ответы [ 2 ]

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

Я считаю, что Take (10) будет правильным.

 var Students= (from c in Groups
                orderby c.DateAdded descending
                select c).Take(10);

Мой опыт работы с Take заключается в том, что он генерирует ужасные sql.

EDIT:

Посмотрите, поможет ли этот пост, он говорит об условных включениях.

http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx

1 голос
/ 18 июня 2010

Не удалось сделать предложение Гратзи с условно включенной работой ... и нашел решение здесь: http://msdn.microsoft.com/en-us/library/bb896249.aspx

Запрос будет выглядеть так:

group.Students.Attach(group.Students
                           .CreateSourceQuery()
                           .OrderByDescending(x=>x.JoinDate)
                           .Take(10));

Это именно то, что я искал!

Спасибо за все ответы в любом случае!

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