2017-12-11 3 views
0

meine Frage ist, habe ich drei Tabellen, Dateien, Dokumente und Bilder, wo eine Datei viele Dokumente haben kann und ein Dokument kann viele Bilder haben.Wie kann man Daten aus einer dritten Tabelle abrufen?

Also was ich versuche, ist, alle Bilder von allen Dokumenten in einer Datei zu bekommen. Ich habe versucht, so etwas wie dieses:

var exp = context.Files.Include(x => x.Documents.Select(s => s.Images)).ToList(); 
       var Doc = exp.Documents; 
       foreach(var docs in Doc) 
       { 
        listImg.Add(docs.Images); 
       } 

Aber es funktioniert nicht, sagt er, kann nicht von ‚System.Collections.Generic.ICollection‘ auf ‚Entities.Images‘ konvertieren.

Irgendeine Idee, wie man das repariert oder es anders macht?

+0

Können Sie die Klasse dieser Liste anzeigen? ListImg'? \ –

Antwort

1

Sie suchen SelectMany:

var listImg = context.Files 
        .SelectMany(f => f.Documents) 
        .SelectMany(d => d.Images) 
        .ToList(); 

Was die Ausnahme: Sie definiert listImg als List<Entities.Images>, so dass Sie Images Objekte es, nicht ICollection<Images> Objekte hinzuzufügen haben. Wie Sie sehen, benötigen Sie die Methode Add nicht, da Sie die Liste in einer Anweisung erstellen können.

Übrigens wird empfohlen, singuläre Namen für Klassen zu verwenden, d. H. Image anstelle von Images.

0

Sie können den Wert nicht direkt zu einer Liste hinzufügen, ohne eine Klasse einer Liste selbst zu deklarieren.

Ihren Code

foreach(var docs in Doc) 
{ 
     listImg.Add(docs.Images); 
} 

Wechsel zu Unter der Annahme, dass Sie bereits eine Klasse dieser listImg

public class GetList 
{ 
    public int id {get;set;} 
    public Image thisImage{get;set;} 
} 
erstellt

Um

Implement
Verwandte Themen