2016-12-22 1 views
-3

S'il vous plaît voir la requête LINQ ci-dessous:un à plusieurs requêtes LINQ - erreur du compilateur

var test = from s in db.Students 
      join c in db.Courses on s.courseid equals c.id into d 
      where s.name.StartsWith("Bert") 
      select new Student { id=s.id,name=s.name, Course = d.Select(x => x.name) }; 

A liens étudiants à un cours. Par conséquent, la valeur de Course dans ce qui précède devrait être une collection de cours. Cependant, il existe une erreur de compilation (System.ArguementNullException). Qu'est-ce que je fais mal?

Je suis compétent en SQL, mais je suis nouveau à LINQ. S'il vous plaît voir le SQL de la base de données ci-dessous:

enter image description here

***Student Class*** 
    public partial class Student 
    { 
     public int id { get; set; } 
     public string name { get; set; } 
     public Nullable<int> age { get; set; } 
     public Nullable<int> courseid { get; set; } 

     public virtual Course Course { get; set; } 
    } 

    Course Class 

public partial class Course 
    { 
     public Course() 
     { 
      this.Students = new HashSet<Student>(); 
     } 

     public int id { get; set; } 
     public string name { get; set; } 

     public virtual ICollection<Student> Students { get; set; } 
    } 
+2

Que dit l'erreur du compilateur? – vbnet3d

+0

Est-il possible qu'un 'nom' est nul dans la base de données? – Pikoh

+0

La classe 'Student' où vous projetez votre requête est la même que celle de votre entité' Student', pourriez-vous la montrer? – octavioccl

Répondre

1

Il semble que vous essayez juste d'obtenir votre requête pour récupérer également la propriété de navigation Course pour vos élèves. À ce titre, tout ce que vous devez faire est Include il:

var students = db.Students 
    .Include(s => s.Course) 
    .Where(s => s.Name.StartsWith("Bert"); 
+0

Cela ressemble à un cours plutôt qu'à un cours qui est ce que je veux. Comment créer l'objet étudiant et cours retourné par IEnumerable? J'ai essayé: foreach (Student s in test) {Cours c = s.Cours; } – w0051977

+0

Il semble tellement plus simple en SQL. J'essaie juste d'apprendre quelque chose de nouveau. – w0051977

+0

Qu'est-ce qu'un 'coursed'? – DavidG