在 C# 中使用数组的数组实现一对多关系
Using Array of Arrays for One to Many Relationship in C#
我正在使用 C# 进行控制台测试。
其实我从来没有用过C#但是VB.Net。我想为 one-to-many 关系创建数组。
我的 'A Student' 有 'Name'、'Sex'、...、'Courses Taken'。
一个学生会选修多门课程,每门课程都有一个标题和包含的主题。每个主题都有名称、描述和要点。
像这样。
Student
- Name - Sex - Courses Taken
Take Courses
- Course Title - Subject Included
Subject
- Subject Name [Math] [MVC]
- Subject description [Advance] [Building Website]
- Subject Point [6.9] [5.6]
我想将每个实体存储在数组中,但我不知道如何将 subjects/courses 连接到每个学生。我怎样才能得到参加数学或 MVC 的学生。因为每个学生都可以有更多的课程/不止一门学科。
您需要创建 类 来描述您的不同对象。
class Student
{
string Name { get; set; }
Gender Sex { get; set; } // write an enum for this
IEnumerable<Course> CoursesTaken { get; set; }
}
class Course
{
string Title { get; set; }
Subject Subject { get; set; }
}
class Subject
{
string Name { get; set; }
string Description { get; set; }
double Points { get; set; }
}
使用 List
创建这些新类型实例的枚举允许您使用 LINQ 来 select 或评估列表的成员(嵌套 for 循环也适用):
// populate a list of students called studentList
//...
// use LINQ to select the students you want
var mathResults = studentList.Where(student => student.CoursesTaken.Any(course => course.Subject.Name == "Math"));
我觉得我已经很好地完成了它...
请检查我的代码以解决我的问题! ^^
我首先制作了 3 classes 如下..
class Students
{
public string StudentName;
public int StudSize;
public bool StudSex;
public List<Take_Courses> tcourses;
public Students() { }
public Students(string name, int size, bool sex, List<Take_Courses> tcourses)
{
StudentName = name;
StudSize = size;
StudSex = sex;
this.tcourses = tcourses;
}
}
和
class Take_Courses
{
public string classname;
public List<Arr_Courses> arr_Course;
public Take_Courses() { }
public Take_Courses(string classname, List<Arr_Courses> arr_courses)
{
this.classname = classname;
arr_Course = arr_courses;
}
}
class Arr_Courses
{
public string cosname;
public string cosdesc;
public float cospoint;
public Arr_Courses() { }
public Arr_Courses(string name, string description, float point)
{
cosname = name;
cosdesc = description;
cospoint = point;
}
}
然后我在 Main class 中初始化值如下;
Arr_Courses acos=new Arr_Courses();
Arr_Courses acos1=new Arr_Courses("Math","Advance Math1",9.5f);
Take_Courses cos=new Take_Courses();
Take_Courses cos_take1=new Take_Courses("Info Tech",new List<Arr_Courses>{acos1});
Students stu=new Students();
Students Stu1 = new Students("Milla", 22, true,new List<Take_Courses>{cos_take1});
然后我制作另一个列表来生成学生姓名并用于循环并将每个列表分配给列表。
我认为一些重要的部分是这个。
if (arr_stud[i].tcourses[j].arr_Course[k].cosname.Equals("Math"))
{
Math_Stud++;
MathStudents[i] = arr_stud[i];
}
如果有人需要这样的东西,我会分享这个。任何未分级的代码都欢迎共享。非常感谢。
我正在使用 C# 进行控制台测试。
其实我从来没有用过C#但是VB.Net。我想为 one-to-many 关系创建数组。
我的 'A Student' 有 'Name'、'Sex'、...、'Courses Taken'。
一个学生会选修多门课程,每门课程都有一个标题和包含的主题。每个主题都有名称、描述和要点。
像这样。
Student
- Name - Sex - Courses Taken
Take Courses
- Course Title - Subject Included
Subject
- Subject Name [Math] [MVC]
- Subject description [Advance] [Building Website]
- Subject Point [6.9] [5.6]
我想将每个实体存储在数组中,但我不知道如何将 subjects/courses 连接到每个学生。我怎样才能得到参加数学或 MVC 的学生。因为每个学生都可以有更多的课程/不止一门学科。
您需要创建 类 来描述您的不同对象。
class Student
{
string Name { get; set; }
Gender Sex { get; set; } // write an enum for this
IEnumerable<Course> CoursesTaken { get; set; }
}
class Course
{
string Title { get; set; }
Subject Subject { get; set; }
}
class Subject
{
string Name { get; set; }
string Description { get; set; }
double Points { get; set; }
}
使用 List
创建这些新类型实例的枚举允许您使用 LINQ 来 select 或评估列表的成员(嵌套 for 循环也适用):
// populate a list of students called studentList
//...
// use LINQ to select the students you want
var mathResults = studentList.Where(student => student.CoursesTaken.Any(course => course.Subject.Name == "Math"));
我觉得我已经很好地完成了它... 请检查我的代码以解决我的问题! ^^ 我首先制作了 3 classes 如下..
class Students
{
public string StudentName;
public int StudSize;
public bool StudSex;
public List<Take_Courses> tcourses;
public Students() { }
public Students(string name, int size, bool sex, List<Take_Courses> tcourses)
{
StudentName = name;
StudSize = size;
StudSex = sex;
this.tcourses = tcourses;
}
}
和
class Take_Courses
{
public string classname;
public List<Arr_Courses> arr_Course;
public Take_Courses() { }
public Take_Courses(string classname, List<Arr_Courses> arr_courses)
{
this.classname = classname;
arr_Course = arr_courses;
}
}
class Arr_Courses
{
public string cosname;
public string cosdesc;
public float cospoint;
public Arr_Courses() { }
public Arr_Courses(string name, string description, float point)
{
cosname = name;
cosdesc = description;
cospoint = point;
}
}
然后我在 Main class 中初始化值如下;
Arr_Courses acos=new Arr_Courses();
Arr_Courses acos1=new Arr_Courses("Math","Advance Math1",9.5f);
Take_Courses cos=new Take_Courses();
Take_Courses cos_take1=new Take_Courses("Info Tech",new List<Arr_Courses>{acos1});
Students stu=new Students();
Students Stu1 = new Students("Milla", 22, true,new List<Take_Courses>{cos_take1});
然后我制作另一个列表来生成学生姓名并用于循环并将每个列表分配给列表。
我认为一些重要的部分是这个。
if (arr_stud[i].tcourses[j].arr_Course[k].cosname.Equals("Math"))
{
Math_Stud++;
MathStudents[i] = arr_stud[i];
}
如果有人需要这样的东西,我会分享这个。任何未分级的代码都欢迎共享。非常感谢。