LINQ - 帮我把握一个例子,我认为LINQ应该能够解决!

时间:2009-03-26 12:15:12

标签: c# linq

我正试图进入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可以使用的结构。

2 个答案:

答案 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查询填充学生列表,但我不确定如何没有更多信息。

希望这是一些帮助。