为什么我的linq查询将同一项目而不是所有项目添加到列表中?

时间:2019-05-20 16:56:18

标签: c# sql asp.net-mvc entity-framework linq

我正在研究一个正在工作的项目,并试图从我们的数据库中获取一个学生的所有课程,但是同一课程不断被添加到列表中,而不是所有课程。我实际上有一个与另一个表有关的查询,该表获取了所有教授的班级,由于某种原因,这是可行的。

数据库中的条目不是重复的。

这是我遇到问题的代码:

semester = "SP";
year = "19;
id = "0000001";
var tempCourses = (from b in db2.StuEnrolls where b.studentID == id && b.semester == semester && b.year == year orderby b.courseID select b).ToList();

我也尝试过:

var tempCourses = (from b in db2.StuEnrolls
                               where b.studentID == id && b.semester == semester && b.year == year
                               orderby b.courseID
                               select new StuEnrolls
                               {
                                   studentID = b.studentID,
                                   courseID = b.courseID,
                                   year = b.year,
                                   semester = b.semester,
                                   dept = b.dept,
                                   course = b.course,
                                   section = b.section,
                                   sectionTitle = b.sectionTitle,
                                   courseGrade = b.courseGrade,
                                   courseCredits = b.courseCredits
                               }).ToList();

这是适用于教授的类似代码:

var tempCourses = (from b in db2.CourseSectionsInstructor where b.instructorID == id orderby b.courseID select b).ToList();

截至目前,我正在从数据库中获得5门课程,所有课程都相同。但是,我应该获得5个唯一条目。这是输出的example。学生编号已被删除。

DatabaseStructure看起来像这样:

    public partial class StuEnrolls
    {
        public string studentID_courseID
        {
            get
            {
                return studentID + " " + courseID;
            }
        }

        [Key]
        public string studentID { get; set; }

        public string courseID { get; set; }

        public string year { get; set; }

        public string semester { get; set; }

        public string dept { get; set; }

        public string course { get; set; }

        public string section { get; set; }

        public string sectionTitle { get; set; }

        public string courseGrade { get; set; }

        public decimal courseCredits { get; set; }
    }

数据库中的表由以下内容组成: Table Design

1 个答案:

答案 0 :(得分:0)

该问题似乎与具有两个主键的表和仅具有一个键的数据库结构有关。

此代码似乎已解决了该问题:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
        modelBuilder.Entity<StuEnrolls>().HasKey(k => new { k.studentID, k.courseID });
}