2017-04-25 8 views
0

Lassen Sie uns sagen, ich habe eine Linq-Abfrage ANG erhalten:Linq to Sql LEFT JOIN Durchschnittswert

var query = from course in _unitOfWork.Course.GetAll() 
      join candidate in _unitOfWork.CandidateCourses.GetAll() on course.Id equals candidate.Course_id join cr in _unitOfWork.CourseReviews.GetAll() on course.Id equals cr.Course_id into g from rt in g.DefaultIfEmpty() 
      where candidate.UserId == CandidateId 
      select new CourseFields { Id = course.Id, 
             Course_name = course.Course_name, 
             Course_description = course.Course_description, 
             Rating = g.Average(x => x.Rating), 
             TotalSections = sections.Count(), }; 

Hier bin ich immer Ausnahme bei der Berechnung der Durchschnitt der Bewertung, wenn keine Daten in der Tabelle gibt für diesen bestimmten Kurs.

Kann jemand helfen, wo ich falsch mache?

+0

Also, was möchten Sie, dass die Bewertung sein wird, wenn es keine Aufzeichnungen sind? –

+0

Verwenden Sie Entity Framework? Nicht, dass es diesen Fehler ändern würde, aber es gibt eine elegantere Schreibweise mit Lambda-Notation. –

Antwort

0

Average erfordert bei Liste ein Element in der Sequenz.

Sie können DefaultIfEmpty hinzufügen, um die Standardbewertung festzulegen, wenn keine Elemente vorhanden sind.

... 
Rating = g.DefaultIfEmpty(0).Average(x => x.Rating), 
... 

Wenn Sie Bewertung als Typ Nullable hatte (wie Nullable<double>>) dann wäre es nicht eine Ausnahme aus, sondern retrun null statt

0

Sie auch dieses heraus versuchen. Prüfen Sie, ob null, bevor eine durchschnittliche tun ...

Rating = (g!=null && g.Count()>0)?g.Average(x => x.Rating):0, 

...