假設我有以下課程
public class Student
{
public int Id {get; set;}
public int ClassId {get; set;}
public string ClassName {get; set;}
public string Name {get; set;}
public int Age {get; set;}
}
public class StudentDTO
{
public string Name {get; set;}
public int Age {get; set;}
}
public class ClassStudent
{
public string ClassName {get; set;}
public List<StudentDTO> StudentDTOs {get; set;}
}
我有一個var listOfStudents = new List<Student>();
現在我將值輸入 listOfStudents 并根據 ClassId 分組如下:
listOfStudents = listOfStudents.GroupedBy(l => l.ClassId).ToList();
我希望輸出是一個型別串列ClassStudent,每組listOfStudents都是這個串列的一個元素
我正在執行如下:
listOfStudents.Foreach(s =>
{
var classStudents = listOfStudents.Where(ls => ls.ClassId == s.Key).ToList();
classes.Add(new ClassStudents
{
ClassName = classStudents.FirstOrDefault().ClassName,
StudentDTOs = classStudents.Select(ls => new StudentDTO
{
Name = ls.Name,
Age = ls.Age
}).ToList()
});
});
正如您在我的方法中注意到的那樣,分組元素不再有任何效果,因為我仍然不得不求助于 foreach 和 where 元素來填充類。
所以我可以簡單地做如下
var classIds = listOfStudents.Select(l => l.ClassId).Distinct().ToList();
foreach(int id in classIds)
{...}
基本上,分組在這里毫無意義
他們是一種避免 foreach 并直接訪問組內元素的方法嗎?
理想情況下是這樣的:
classes = listOfStudents.Select(g => new ClassStudent
{
ClassName = g.Elements.FirstOrDefault().ClassName,
StudentDTOs = g.Elements.Select(ls => new StudentDTO
{
Name = ls.Name,
Age = ls.Age
}).ToList()
});
uj5u.com熱心網友回復:
最好添加ClassName到分組鍵。如果不是唯一的,則留ClassId在分組鍵中:ClassName
var classes = listOfStudents
.GroupBy(s => new { s.ClassId, s.ClassName})
.Select(g => new ClassStudents
{
ClassName = g.Key.ClassName,
StudentDTOs = g.Select(ls => new StudentDTO
{
Name = ls.Name,
Age = ls.Age
}).ToList()
})
.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529371.html
標籤:C#林克通过...分组
