0

Hallo ich unten Code haben alsWie Durchschnittliche Bewertung in Entity Framework

var query = (from R in db.Registrations 
      join c in db.Campus 
      on R.CampusId equals c.CampusId 
      from tsr in db.TutorStudentRequests.Where(t => t.TutorId == R.RegistrationId).DefaultIfEmpty() 
      where R.UserTypeId == 2 && tsr.StatusId!=3 
      orderby R.Name ascending 
      select new 
      { 
       RegistrationId = R.RegistrationId, 
       Name = R.Name, 
       Email = R.Email, 
       Phone = R.Phone, 
       Password = c.CampusName, 
       IsGPA = R.IsGPA, 
       IsActive = R.IsActive, 
       StripeId = R.StripeId, 
       CreatedOn = R.CreatedOn, 
       UserTypeId =tsr.StudentReviewRating 
      }) 
     .ToList(); 

bekommen I Registrierungstabelle mit einreihigen haben und ich auch eine andere Tabelle TutorStudentRequests haben, die mehrere Zeilen haben. Wie kann ich den Durchschnitt des Spaltennamens StudentReviewRating in der TutorStudentRequests-Tabelle erhalten?

Struktur kann zu sein scheinen als:

Registrierung Tabelle

RegistrationId Name Email 
    1    abc [email protected] 
    2    xyz [email protected] 

TutorStudentRequests Tabelle

Id TutorId(RegistrationId of F.k.) StudentReviewRating 
1 1         5 
2 1         2 
3 1         1 
4 2         3 

Ich möchte UserTypeId Daten als durchschnittlich StudentReviewRating für jede TutorId

Versuchte

var query = (from R in db.Registrations 
     join c in db.Campus 
     on R.CampusId equals c.CampusId 
     from tsr in db.TutorStudentRequests.Where(t => t.TutorId == R.RegistrationId).DefaultIfEmpty() 
     where R.UserTypeId == 2 && tsr.StatusId != 3 
     group R by new 
     { 
      R.RegistrationId, 
      R.Name, 
      R.Email, 
      R.Phone, 
      c.CampusName, 
      R.IsGPA, 
      R.IsActive, 
      R.StripeId, 
      R.CreatedOn,      
     } into groupings 
     select new 
     { 
      RegistrationId = groupings.Key.RegistrationId, 
      Name = groupings.Key.Name, 
      Email = groupings.Key.Email, 
      Phone = groupings.Key.Phone, 
      Password = groupings.Key.CampusName, 
      IsGPA = groupings.Key.IsGPA, 
      IsActive = groupings.Key.IsActive, 
      StripeId = groupings.Key.StripeId, 
      CreatedOn = groupings.Key.CreatedOn, 
      Average = groupings.Average(p=>Convert.ToDecimal(p.StudentReviewRating)) 
     }); 

Aber es sagt Registrierung keine Definition für 'StudentReviewRating' enthält ..

Was ist falsch?

+0

Warum 'entity-framework' Tag, wenn Sie Abfragen mit Joins von Hand schreiben? Lernen Sie, * Navigationseigenschaften * zu verwenden, und die betreffende Abfrage ist trivial. –

Antwort

1

wie etwa Gruppierung von Tutor, berechnen den Durchschnitt als Bewertungen insgesamt/Anzahl der Bewertungen

var query = from request in data 
      group request by request.TutorId into groupings 
      let total = groupings.Sum(p=>p.StudentReviewRating) 
      let number = groupings.Count() 
      let average = (decimal)total/number 
      select new 
      { 
       TutorId = groupings.Key, 
       Summary = new 
       { 
        Total = total, 
        Number = number, 
        Average = average 
       } 
      } 

und Ergebnisse würden wie folgt aussehen für den gegebenen Testfall

TutorId Summary 
1 Total 8 
    Number 3 
    Average 2.66 
2 Total 3 
    Number 1 
    Average 3 

bearbeiten zusätzliche verbindet und erweiterte Gruppe von

var query = from registration in registrations 
      join request in requests 
       on registration.RegistrationId equals request.TutorId 
      group request by new 
      { 
       registration.RegistrationId, 
       registration.Name, 
       request.TutorId, 
      } into groupings 
      select new 
      { 
       RegistrationId = groupings.Key.RegistrationId, 
       TutorId = groupings.Key.TutorId, 
       Average = groupings.Average(p=>p.StudentReviewRating) 
      } 
+0

können Sie es klarer mit meiner Abfrage machen, In meiner Abfrage hatte ich Links Join und Inner Join beide hinzugefügt – Xtremcool

+0

Ich habe das Ergebnis basierend auf Ihrem Testfall hinzugefügt –

+0

Kannst du meine Updates sehen, warum ich nicht meinen Datensatz erhalten in Registrations Tabelle – Xtremcool

Verwandte Themen