0

我有两个不同的集合,如下所示

public class Student
{
    public int StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }      
}

public class Skills
{
    public int SkillID { get; set; }
    public int StudentID { get; set; }
    public string Keyskill_Name { get; set; }        
    public int LastUsedYear { get; set; }
}

这里一个学生可以包含多个keyskills

我只想填写一个新的集合,如下所示

public class StudentDetails
{
    public int StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public list<string> Keyskill_Name { get; set; }
}

请帮我。提前致谢。

4

1 回答 1

1

GroupJoinLINQ 方法是这种情况的完美解决方案:

    List<Student> students = new List<Student>();
    List<Skills> skills = new List<Skills>();

    List<StudentDetails> studentDetails = students.GroupJoin(skills, student => student.StudentID, skill => skill.StudentID, (student, skillsForStudent) => new StudentDetails
    {
        FirstName = student.FirstName,
        LastName = student.LastName,
        StudentID = student.StudentID,
        Keyskill_Name = (from skill in skillsForStudent
                         select skill.Keyskill_Name).ToList()
    }).ToList();

如何使用GroupJoin方法?

  • 从集合中调用与结果具有 1 对 1 关系的方法(这里对于每个Student,只有一个对应StudentDetails的 .
  • 该方法的第一个参数是您要“分布”在其他项目上的集合(这里的技能是“分布”在整个学生集合上)
  • 第二个和第三个参数用于解释如何使第一个集合的元素和第二个集合的元素发生碰撞。Lambda 表达式在这种情况下非常有用。
  • 最后,第四个参数用于定义结果。它是一个具有 2 个参数的函数:第一个集合(此处students)的一个元素及其在第二个集合中使用碰撞找到的相应元素。
于 2013-01-21T13:20:45.283 回答