Linq-to-sql EF4 - Создать список из - PullRequest
0 голосов
/ 21 июня 2011

У меня есть следующий EF

Education {
long id,
string name,
}

User {
long id
string name
...
}

UserEducation
{
long userId,
long educationId,
long rank
}

Я хочу получить вызов linq-to-sql, который будет возвращать результаты, такие как: UserName Образование как список образования1, образование2, образование3 и т. Д.

Я могу получить результат, содержащий несколько записей об образовании для пользователя, используя

from u in users where u.userIsSomething.Equals(true)
join d in usereducation on u.id equals d.userid
join e in education on d.educationId equals e.Id
select new UserEd() {
  UserName = u.Name,
  Education =  <--- I end up with several unique education entries, I want to flatten into a list

Так возьмите записи вроде

Fred   AA in Culinary Arts
Fred   BS in Food Science
Fred   MBA

для генерации

Fred AA в Кулинарном Искусстве, BS в Пищевой Науке, MBA

Я понимаю, что могу просто перебирать записи, но я бы хотел объединить их в одно утверждение.

Не нашли подобного вопроса, любая помощь очень ценится.

1 Ответ

0 голосов
/ 21 июня 2011

Если вы используете linq-to-sql или платформу сущностей, у вас должны быть свойства навигации, чтобы ваши ручные объединения были избыточными.Если у вас нет навигационных свойств, вы используете технологию неправильно.Переопределите вашу модель, чтобы она содержала свойства навигации, и попробуйте это (не проверено):

var query = from u in context.Users where u.userIsSomething.Equals(true)
            select new UserEd {
                UserName = u.Name,
                Education = from ue in u.UserEducations
                            group ue by ue.Rank into grouped
                            select new RankedEd {
                                grouped.Key,
                                grouped.Select(g => g.Education.Name) 
                            }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...