2016-03-26 9 views
1

Ich arbeite mit ASP.net MVC, C# Ich habe zwei Modellklassen, Künstler und Album, ich schuf eine neue separate Klasse namens Operationen, um Methoden hinein (ich habe es `sa gute Praxis in Bezug auf MVC, Methoden in einem separaten Layer und nicht in Controller-Klasse oder Model-Klassen zu implementieren). Ich möchte eine Methode, um Informationen von beiden Modellen zurückzugeben, ich habe bereits die Datenbank mit zwei Tabellen Künstler und Alben von ArtistID verbunden. Ich weiß, wie die Abfrage funktionieren muss, aber was sollte diese Methode zurückgeben? Weißt du, welcher der richtige Weg ist, dies zu entwickeln? Wie wird der Controller diese Methode aufrufen und eine Ansicht erstellen, wenn man bedenkt, dass es sich um eine Mischung aus Künstler und Alben handelt? Soll ich ein ViewModel speziell dafür erstellen? Wie kann ich das machen?Zeige join linq query in einer Ansicht

Modellklassen:

public class Artist 
{ 
     public int ArtistID { get; set; } 
     public string Name { get; set; } 
     public string LastName { get; set; } 
     public int Age { get; set; } 
     public virtual List<Album> Albums { get; set; } 
} 

public class Album 
{ 
     public int AlbumID { get; set; } 
     public string AlbumName { get; set; } 
     public virtual Artist Artist { get; set; } 
     public int ArtistID { get; set; }    
} 

Operationen Klasse: rief ich die Methode AlbumsByArtist es Arbeit keine News abum Liste zurückkehren, weil es eine Verbindung zwischen Künstler und Album zurück, was sollte die Rückkehr? Wie kann ich den Controller verwenden, um die Ergebnisse an eine Ansicht zu senden und diese Ergebnisse in einer Ansicht anzuzeigen?

public class Operations 
{ 
     MusicStoreDbContext db = new MusicStoreDbContext(); 
     public List<Album> AlbumsByArtist() 
     { 
      var temp = (from ar in db.Artists 
         join al in db.Albums on ar.ArtistID equals al.ArtistID 
         select new { al.AlbumName, ar.Name, ar.LastName }); 
      return temp; 
     } 
} 

Antwort

4

Sie müssen hier ein ViewModel erstellen. ViewModels sind spezifisch für unsere Views, in denen wir spezifische Daten nach Bedarf anzeigen möchten.

public class AlbumsByArtistVM 
{ 
     public string AlbumName {get;set;} 
     public string ArtistName {get;set} 
     public string ArtistLLastName {get;set;} 

} 

und zurück, das wie:

public List<AlbumsByArtistVM> AlbumsByArtist() 
{ 
    var temp = (from ar in db.Artists 
       join al in db.Albums on ar.ArtistID equals al.ArtistID 
       select new AlbumsByArtistVM 
       { 
        AlbumName =al.AlbumName, 
        ArtistName =ar.Name, 
        ArtistLLastName =ar.LastName 
       }); 
    return temp; 
} 
Wir sollten Ansicht Modelle immer für Ansichten anstelle von Datenbankmodelle direkt in View erstellen