我正试图进入LINQ对象,因为我可以看到它的力量。幸运的是,我有一个问题,我认为LINQ应该能够解决。
这是问题(细节是一个例子);
public class SchoolClass
{
public int ID;
public string Name;
public string Teacher;
public string RoomName;
public string Student_Name;
public int Student_Age;
}
正如您在示例中所看到的,ClassName,Teacher和Room与学生之间存在一对多的关系,即一个班级中可能有很多学生。
如果我们有一个List,是否可以使用LINQ创建一个List但只有一个实例ID,Name,Teacher,RoomName和一个Student_Name和Age的ArrayList?
制作:
public class Students
{
public string Student_Name;
public int Student_Age;
}
public class SchoolClass
{
public int ID;
public string Name;
public string Teacher;
public string RoomName;
public ArrayList Students;
}
基本上,使用LINQ将List清理为更合理的结构?
给出这个例子的一些背景知识。 DataGrid使用第二个结构来生成Master-Child关系。我们在类中存储SchoolClass和StudentInformation,如上所示。 LINQ能够很好地将我们的初始List转换为DataGrid可以使用的结构。
答案 0 :(得分:6)
我将ArrayList
更改为List<Students>
,并且:
List<SourceData> source = new List<SourceData>();
//...your data here ;-p
var classes = (from row in source
group row by new {
row.ID, row.Name,
row.Teacher, row.RoomName }
into grp
select new SchoolClass
{
ID = grp.Key.ID,
Name = grp.Key.Name,
Teacher = grp.Key.Teacher,
RoomName = grp.Key.RoomName,
Students = new List<Students>(
from row in grp
select new Students
{
Student_Age = row.Student_Age,
Student_Name = row.Student_Name
})
}).ToList();
答案 1 :(得分:1)
如果我正确理解了这一点,我认为实现SchoolClass类的最佳方法是创建一个Student类(如果你正在使用它,可能是一个LINQ-to-SQL实体)有一个类型学生的通用列表,类似于:
public class SchoolClass
{
public int ID;
public string Name;
public string Teacher;
public string RoomName;
public List<Student> Students;
}
然后可以使用linq查询填充学生列表,但我不确定如何没有更多信息。
希望这是一些帮助。