2017-03-13 3 views
-1

lange Zeit Leser und erste Frage Fragesteller. Ohne weitere Umschweife ist mein Dilemma wie folgt:LINQ, um Durchschnitt von Kind des Kindes zu erhalten

Ich versuche, einige Durchschnittswerte in der Datenbank in einer Ansicht mit viewmodel anzuzeigen. Alles geht gut, bis ich versuche, einen Wert aus der Kind-Tabelle des Kindes abzurufen (ich bin sicher, dass es ein besseres Wort für die Beziehung gibt als das, aber heyho).

Das Modell sieht wie folgt aus: Library model

Ich verstehe, dass mit einer einfachen Datenbank wie dieser problematischen Durchschnittswert leicht im „Buch“ Tabelle gespeichert werden könnte, aber ich nur bin replizieren, das Problem in einem vereinfachten Umgebung zum Testen.

Das Ansichtsmodell ist einfach:

public string Firstname { get; set; } 
    public int NumberOfBooks { get; set; } 
    public double AvgScore { get; set; } 

    public double BookPeopleAvg { get; set; } 
    public double AvidReadersAvg { get; set; } 
    public double LibraryinternalAvg { get; set; } 

Und hier ist die Controller-Aktion:

public async Task<ActionResult> Index() 
    { 
     var authors = db.Authors    
      .Include(g => g.Books) 
      .Include(g => g.Books.Select(c => c.Reviews)) 
      .Select(g => new AuthorViewModel 
     { 
      Firstname = g.Firstname,    
      NumberOfBooks = g.Books.Count(), 
      AvgScore = g.Books.Average(c => (double?)c.Score) ?? 0, 
      BookPeopleAvg = g.Books.Select(c => c.Reviews.Average(x => (double?)x.BookPeople) ?? 0) 
     }); 
     return View(await authors.ToListAsync()); 
    } 

ich in der Lage bin zu schön die AvgScore zu bekommen, aber immer den Durchschnitt für BookPeopleAvg (und die anderen zwei) erweist sich als schwierig für mich. Ich habe einige Antworten mit GroupBy gefunden, aber ich konnte sie nicht in meine Abfrage einbinden.

Der Compiler-Fehler Ich bin für BookPeopleAvg bekommen ist:

CS0029 kann nicht implizit Typ ‚System.Collections.Generic.IEnumerable‘ auf ‚double‘

habe ich versucht, einige verschiedene Würfe obwohl ich don konvertieren Ich glaube, das Problem liegt trotz der damit verbundenen Fehlermeldung in der Umstellung.

Schließlich wird dies in MVC 5 getan, wenn das von Bedeutung ist.

Ich hoffe jemand kann mir in irgendeiner Weise helfen, danke im Voraus!

+1

Ein Kind, das Kind im Allgemeinen als bezeichnet wird ein "Enkelkind" oder ein "Nachkomme" – Jamiec

+0

@Jamiec Ein Enkelkind wäre der richtige Ausdruck, der Nachkomme definiert das Niveau nicht, obwohl der Nachkomme auch Enkelkinder enthält. – Andrew

+0

@Andrew Ich denke, das war mein Punkt. Der spezifische Begriff ist ein Enkelkind, das vom allgemeinen Begriff Nachkomme umfasst wird. Ich war vielleicht ein wenig unklar. – Jamiec

Antwort

0

Änderung dieser

BookPeopleAvg = g.Books.Select(c => c.Reviews.Average(x => (double?)x.BookPeople) ?? 0) 

dieser

BookPeopleAvg = g.Books.SelectMany(c => c.Reviews).Average(x => (double?)x.BookPeople) ?? 0) 

so, wie Sie es haben Sie tatsächlich die Auswahl eines IEnumerable von Doppel (Ihre Mittelwerte)

+0

Das funktioniert wunderbar, danke Liviu. Ich musste die letzten schließenden Klammern entfernen, sonst habe ich unglaublich viele Compilerfehler bekommen. – Wubbler

Verwandte Themen