Используйте LINQ, чтобы объединить несколько строк с одним и тем же значением в одну строку - PullRequest
0 голосов
/ 30 января 2019

Сгруппируйте повторяющиеся значения в списке объектов, используя запрос Linq.

У меня есть следующие данные в виде таблицы под названием «SudentAssessment» с этими данными.

AssessmentId    Username        SITSupervisor    WorkSupervisor
1              iwsp.student001  iwsp.staff001   iwsp.supervisor001
2              iwsp.student001  iwsp.staff002   iwsp.supervisor001
3              iwsp.student002  iwsp.staff001   iwsp.supervisor002
4              iwsp.student003  iwsp.staff003   iwsp.supervisor003
5              iwsp.student004  iwsp.staff001   iwsp.supervisor004
6              iwsp.student004  iwsp.staff005   iwsp.supervisor004
7              iwsp.student005  iwsp.staff003   iwsp.supervisor005

Здесь проблема заключается в том, что строки 1,2 и 5,6 имеют одинаковые данные, но разница только в том,Сидеть супервайзером, детали разные.Каждая из этих строк заполняется в StudentAssessmentDTO, который выглядит следующим образом.

public class StudentAllocationDTO
{
     public int AssessmentId {get;set;}
     public string Username {get;set;}
     public string SITSupervisor {get;set;}
     public string WorkSupervisor {get;set;}
}

В соответствии с текущей реализацией I при вызове метода, который возвращает List со всеми 7 записями.так как строки 1,2 и 5,6 имеют больше единственной разницы в «SITSupervisor», я хочу назначить следующую структуру DTO, используя LINQ в c #.

public class NEWStudentAllocationDTO
{
     public int AssessmentId {get;set;}
     public string Username {get;set;}
     public List<string> SITSupervisor {get;set;}
     public string WorkSupervisor {get;set;}
}

Если вам кому-то нужны дальнейшие разъяснения, пожалуйста, дайте мне знатьв комментарии.

1 Ответ

0 голосов
/ 30 января 2019

Группируйте их по анонимному типу, содержащему общие свойства.

        IEnumerable< NEWStudentAllocationDTO> grouped = l.GroupBy(x => new { x.Username, x.WorkSupervisor })
            .Select(x => new NEWStudentAllocationDTO()
            {
                AssessmentId = x.Key.AssessmentId,
                WorkSupervisor = x.Key.WorkSupervisor,
                Username = x.Key.Username,
                SITSupervisor = x.Select(y => y.SITSupervisor).ToList()
            });
...