2

私のasp.netアプリには、とを含むクラスがInstructorIDありInstructorNameます。古いコードでは、 ( value ) と( key
) を含む System.Collections.Hashtable があります。 InstructorNameStudentID

私がやりたいことはstudentID、クラス オブジェクト (where InstructorName = InstructorName) に を追加することです。1 人のインストラクターは多くの学生を関連付けることができますが、1 人の学生は 1 人のインストラクターしか持つことができません。

私のクラスオブジェクトは次のとおりです。

public class ClassInstructor
{
    public int InstructorID { get; set; }
    public string InstructorName { get; set; }
    public List<string> studentID { get; set; }
}

どうすればそれを達成できますか?
または、これを行うより良い方法はありますか?

4

1 に答える 1

1

ハッシュ テーブルが、キーが StudentID で値が InstructorName であるディクショナリである場合、次の操作を実行できます。

Dictionary<string, string> studentTeachers = new Dictionary<string, string>();
studentTeachers.Add("Student #1", "Instructor #1");
studentTeachers.Add("Student #2", "Instructor #1");
studentTeachers.Add("Student #3", "Instructor #1");
studentTeachers.Add("Student #4", "Instructor #1");
studentTeachers.Add("Student #5", "Instructor #2");
studentTeachers.Add("Student #6", "Instructor #2");
studentTeachers.Add("Student #7", "Instructor #2");
studentTeachers.Add("Student #8", "Instructor #2");

var instructors = new List<ClassInstructor>();

instructors.Add(new ClassInstructor() { InstructorID = 1, InstructorName = "Instructor #1" });
instructors.Add(new ClassInstructor() { InstructorID = 2, InstructorName = "Instructor #2" });

foreach (var instructor in instructors)
    instructor.Students = studentTeachers.Where(x => x.Value == instructor.InstructorName).Select(x => x.Key).ToList();

多くのコードを投稿しなかったため、特定のオブジェクトで動作するようにこれを適応させる必要があるかもしれません。これは、インストラクターのコレクションが既に入力されており、既存の学生への参照を置き換えていることも前提としています。また、インストラクター名の文字列が正確に一致すると仮定しています。そうでない場合は、より寛大な文字列比較を実行する必要があるかもしれません。

基本的に、このコードでは、LINQ を使用して、一致するキーに基づいてハッシュ テーブルから射影した文字列のリストを各 Students コレクションに入力します。

于 2013-10-01T16:30:39.780 に答える