有没有办法搜索两个不同的集合并使用LINQ填充另一个集合?

时间:2013-01-21 13:07:42

标签: linq c#-4.0 lambda

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

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; }
}

这里有一个学生可以包含多个keykils

我只想填写下面的新集合

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; }
}

请帮帮我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

    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)及其在第二组中使用碰撞找到的相应元素。