Как сгруппировать объединение с linQ - PullRequest
0 голосов
/ 06 февраля 2020

Мне нужно объединить два списка по идентификатору, чтобы сопоставить значения с сущностью пользователя.

В этой части, я думаю, мне удалось сделать это с:

 var concernedParticipantIds = baseValues.Select(x => x.ParticipantId).Distinct().ToList();
                var queryParticipants =_unitOfWorkMt.GetMTReadonly<Participant>().GetQuery(tenantId).Where(x => concernedParticipantIds.Contains(x.Id));

                var participantAndValues = from value in baseValues
                    join participant in queryParticipants on value.ParticipantId equals participant.Id 
                    select new {Participant = participant, Value = value};

Но это приводит к одной строке на значение, например:

user_1 => value_1
user_1 => value_2
user_1 => value_3
user_2 => value_1
user_2 => value_2
user_2 => value_3
...

Есть ли способ группировки по пользователю? Я хотел бы что-то вроде:

- user_1 => value_1  
          value_2
          value_3
- user_2 => value_1
          value_2
          value_3

Единственное, что я придумал, это что-то вроде

 var results = from p in participantAndValues
               group p.Value by p.Participant into temp
               select new { Person = temp.Key, Values = temp.ToList() };

Кажется, что работает, но не уверен, что это правильный путь, и, возможно, есть способ сделать это одним запросом?

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Использование GroupJoin:

var participantAndValues = from value in baseValues
    join participant in queryParticipants on value.ParticipantId equals participant.Id into paricipantJ
    select new {Participant = participant, Values = participantJ };
1 голос
/ 07 февраля 2020

Вы можете достичь этого следующим образом

var results = from p in participantAndValues
               group p by p.Participant into g
               select new { Person = g.Key, Values = g.ToList() };

Или как выражение без запроса:

var results = participantAndValues.GroupBy(p => p.Participant)
                                  .Select(g => new { Person  = g.Key, Values = g.ToList() });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...