【问题标题】:How do I populate the class list which has list of classes for each class item with MySQL data?如何使用 MySQL 数据填充包含每个类项的类列表的类列表?
【发布时间】:2019-03-22 03:12:10
【问题描述】:

这是我在 C# 中的课程之一:

public class Courses
    {
        [DataMember]
        public string SchoolName { get; set; }
        [DataMember]
        public string MajorName { get; set; }
        [DataMember]
        public List<string> Course { get; set; }

        public Courses()
        {
            Course = new List<string>();
        }
    }

对于每个专业,都有一个班级列表。

在我的数据库中,我有三个表,分别代表学校、专业和课程,并加入了外国 leys。一个简单的 SQL 表来读取它们将是给定学校的:

SELECT 
major.MajorName,
course.CourseName 
FROM school
INNER JOIN major ON major.MajorID = course.MajorID  
WHERE school.SchoolName = @SchoolName AND major.SchoolNameID = school.SchoolNameID GROUP BY major.MajorName;

因此,基于此,我预计数据如下。 (多个专业名称,每个专业有多个课程)

MajorName   CourseName
Science      SC101
Science      SC102
Science      SC500
Math         MA100
Math         MA200
ENGLISH      EN450

我可以填充我一开始派生的类的最佳方法是什么? 我在数据库读取查询中的类定义是:

List<Courses> majorclasses = new List<Courses>() 

我可以手动管理数据以填充类,方法是读取不同的专业名称,然后在循环中为每个专业名称填充每个课程。

(pheudo code)
List<string> distinctMajors = majorClasses.Disticnt("majorNames").ToList()
foreach major in distinctMajors
{
   course.Add(courseName)
}

还有其他更好的方法来实现这一点吗?

【问题讨论】:

  • 如果你调整你的原始sql查询以你想要的方式显示会更简单。
  • 您的 foreach 循环似乎复制了紧邻其上方的 LINQ。只有course 已经包含信息才有意义。
  • 顺便说一句,您如何阅读查询结果? SqlDataReader?
  • 嗨 SILENT 1:阅读 SQL 表以填充我的班级的最佳方法是什么?我想阅读列表列表,但我不知道如何在 SQL 中执行此操作。有什么帮助吗?
  • 是的,我正在使用 SQLdataReader 阅读。

标签: c# mysql list class


【解决方案1】:

你可以试试这个。

List<Courses> courses =  data.GroupBy(
    d => new { d.SchoolName, d.MajorName},
    d => d.CourseName,
    (key,g) => new Courses {
        MajorName = key.MajorName,
        SchoolName = key.SchoolName,
        Course = g.Distinct().ToList() }
    ).ToList();

【讨论】:

  • 我喜欢这种方法但不熟悉。这里有什么“数据”? MySQLDataReader 记录?
  • 数据是你的查询结果。但是,如果您有 DataReader,您应该先获取数据并将其转换为列表。您的列表项应包含 SchoolName、MajorName 和 CourseName 元素。
  • 知道了。这是没有遇到过的可爱方法,我会玩它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多