【问题标题】:Get all Column of foreign key table along with main table column in LINQ获取外键表的所有列以及 LINQ 中的主表列
【发布时间】:2016-07-10 06:37:37
【问题描述】:

我正在尝试获取所有学生的所有科目的列表(学生列表中的科目列表)。

Subject 表(SubjectPk,StudentId,SubjectName,Description,AddedOn,AddedBy)有很多针对单个学生的主题。

我试过这个:没有运气

     var data = (from st in db.Student                     
                       join sub in db.Subject on st.StudentId equals  sub.st.StudentId into subjectsList

                       select new StudentModel
                       {
                           Name = st.Name,
               Class= st.Class,
               RollNo = st.RollNo,
                           SubjectList = subjectsList //public ILIst<Subject> SubjectList {get;set;}
                       }).ToList();

还有这个:没有运气

var data = (from st in db.Student                     
                       select new StudentModel
                       {
                           Name = st.Name,
               Class= st.Class,
               RollNo = st.RollNo,
                           SubjectList = db.Subject.where(s.StudentId == st.StudentId).ToList()

                       }).ToList();

var data = (from st in db.Student                     
                   let subjectsList = db.Subject.where(s.StudentId == st.StudentId).ToList()

                   select new StudentModel
                   {
                       Name = st.Name,
           Class= st.Class,
           RollNo = st.RollNo,
                       SubjectList = subjectsList 
                   }).ToList();

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    由于这看起来像是学生和学科之间的多对多关系,理想情况下,您应该有一个不同的表来引用学生和学科。所以你应该有这样的东西:

    public class Student{
       public int Id{get; set;}
       public string StudentName{get; set;}
       public IList<StudentsSubjects> Subjects{get; set;}
       // other properties
    }
    
    public class Subject{
       public int Id{get; set;}
       public string SubjectTitle{get; set;}
       public IList<StudentsSubjects> Students{get; set;}
       // other properties
    }
    
    public class StudentsSubjects{
      public int Id{get; set;}
      public int StudentId{get; set;}
      public int SubjectId{get; set;}
      public DateTime DateAdded{get; set;}
    }
    

    那么,如果你使用实体框架,你会这样做

    data = db.Student.Include(s => s.Subjects).ToList()
    

    然后使用 foreach 循环并获取您想要的数据。

    【讨论】:

    • 是的,你是对的,但遗憾的是我没有使用实体框架:(。
    • 您是否只想获取主题?
    • 不,我喜欢获取 st.Name、st.Class、st.RollNo 和 subjectList
    【解决方案2】:

    您的第一次尝试看起来不错,只是我将 sub.st.StudentId 删除为 sub.StudentId

     var data = (from st in db.Student                     
                       join sub in db.Subject on st.StudentId equals 
                       sub.StudentId into subjectsList
    
                       select new StudentModel
                       {
                           Name = st.Name,
               Class= st.Class,
               RollNo = st.RollNo,
                           SubjectList = subjectsList //public ILIst<Subject> SubjectList {get;set;}
                       }).ToList();
    

    【讨论】:

    • 实际上它只会检索主题表的一列,我需要全部,这可以通过简单的方式使用 join 来实现
    【解决方案3】:

    也许您可以为主题列表添加ToList()。请试试这个:

     var data = (from st in db.Student                     
                 join sub in db.Subject on st.StudentId equals  sub.st.StudentId into subjectsList
                 select new StudentModel
                 {
                     Name = st.Name,
                     Class= st.Class,
                     RollNo = st.RollNo,
                     SubjectList = subjectsList.ToList() //public ILIst<Subject> SubjectList {get;set;}
                 }).ToList();
    

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2021-06-19
      • 2011-11-06
      相关资源
      最近更新 更多