0

私は以下のような2つの異なるコレクションを持っています

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

ここでは、1人の生徒が複数のキースキルを含めることができます

以下のような新しいコレクションを埋めたいだけです

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

LINQメソッドは、このGroupJoin場合の完璧なソリューションです。

    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に対応するが1つだけありStudentDetailsます。
  • メソッドの最初の引数は、他のアイテムに「配布」するセットです(ここでは、スキルは学生のセット全体に「配布」されます)
  • 2番目と3番目の引数は、最初のセットの要素と2番目のセットの要素を衝突させる方法を説明するために使用されます。この場合、ラムダ式は非常に便利です。
  • 最後に、4番目の引数は結果を定義するために使用されます。これは、2つのパラメーターを持つ関数です。最初のセットの要素(ここstudents)と、衝突を使用して検出された2番目のセットの対応する要素です。
于 2013-01-21T13:20:45.283 に答える