2016-03-23 1 views
0

Я пытаюсь получить список всех тем для всех студентов (Список тем в списке учеников).Получить весь столбец внешнего ключевого стола вместе с колонкой главного стола в LINQ

Тема таблица (SubjectPk, StudentId, SubjectName, Description, AddedOn, AddedBy) имеет много предметов для одного студента.

Я попытался это: Нет Luck

 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(); 

и это: Нет Luck

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(); 

ответ

0

Так как это выглядит, как многие ко многим отношения между студентом и Subject, в идеале у вас должна быть другая таблица, в которой будут указаны как учащиеся, так и предметы. так что вы должны иметь что-то вроде этого:

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() 

затем использовать цикл Еогеасп и получить данные, которые вы хотите.

+0

Да, вы правы, но я не использую рамки сущности, к сожалению :( –

+0

вы пытаетесь получить предметы только –

+0

Нет, я хотел бы получить st.Name, st.Class , st.RollNo и subjectList –

0

Ваша первая попытка выглядит нормально, за исключением того я удалил 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(); 
+0

На самом деле он будет извлекать только один столбец таблицы темы, и мне нужно все, и это может быть достигнуто с помощью простого соединения –

0

Может быть, вы можете добавить ToList() для subjectList. Пожалуйста, попробуйте следующее:.?

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(); 
+0

Нет, его тоже не работает .. Спасибо. –

Смежные вопросы