2013-01-04 8 views
9

Ich habe eine LINQ-Abfrage, die Ergebnisse zurückgibt, die mit meiner PictureGallery Klasse übereinstimmen. Ich brauche sie in meine ViewModel aber im Laden die folgende Störung zu erhalten:Wie lade ich diese LINQ-Ergebnisse in meine ViewModel-Klasse?

Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Collections.Generic.IEnumerable'. An explicit conversion exists (are you missing a cast?)

Ich bin ziemlich neu in C#. Wie kann ich "Ergebnisse" in meine "PictureGallery" viewmddel-Klasse umwandeln?

Vielen Dank im Voraus!

Controller:

//Test MediaID 
var MediaID = 75; 

//Query Results 
var Results = from g in DB.Galleries 
       join m in DB.Media on g.GalleryID equals m.GalleryID 
       where g.GalleryID == GalleryID 
       orderby m.MediaDate descending, m.MediaID descending 
       select new { g.GalleryTitle, Media = m }; 

//Create my viewmodel 
var Model = new GalleryViewModel 
{ 
    MediaID = MediaID, 
    PictureGallery = Results, //This line throws the error. 
    PictureCount = Results.Count() 
}; 

Viewmodels:

public class GalleryViewModel 
{ 
    public int? MediaID { get; set; } 
    public IEnumerable<PictureGallery> PictureGallery { get; set; } 
    public int PictureCount { get; set; } 
} 

public class PictureGallery 
{ 
    public int GalleryID { get; set; } 
    public string GalleryTitle { get; set; } 
    public int MediaID { get; set; } 
    public string MediaTitle { get; set; } 
    public string MediaDesc { get; set; } 
    public double Rating { get; set; } 
    public int Views { get; set; } 
} 

Antwort

16

Formulieren Sie Ihre Anfrage als:

//Query Results 
var Results = from g in DB.Galleries 
       join m in DB.Media on g.GalleryID equals m.GalleryID 
       where g.GalleryID == GalleryID 
       orderby m.MediaDate descending, m.MediaID descending 
       select new PictureGallery { 
           GalleryID = g.GalleryId, 
           GalleryTitle = g.GalleryTitle, 
           MediaID = m.MediaID, 
           MediaTitle = m.MediaTitle, 
           MediaDesc = m.MediaDesc, 
           Rating = m.Rating, 
           Views = m.Views} ; 
+0

Yup, das funktioniert! Vielen Dank – Maddhacker24

2

Sie versuchen, ein IEnumerable<PictureGallery>, um einen IQueryable<anonymous> einzustellen. Sie müssen in den richtigen Typ zu transformieren:

var Model = new GalleryViewModel 
{ 
    MediaID = MediaID, 
    PictureGallery = Results 
     .Select(r => new PictureGallery { 
      GalleryID = r.Media.GalleryID, 
      GalleryTitle = r.GalleryTitle, 
      MediaID = r.Media.MediaID, 
      ... // and so on 
     }), 
    PictureCount = Results.Count() 
}; 
0

Dann können Sie var Liste schreiben = result.ToList();

Dann übergeben Sie es, um so zu sehen Rückkehr Ansicht (Liste);

Sie können es in Ihrer Ansicht wie diese Liste @model akzeptieren

Wo Ansichtsmodell mit Eigenschaften eine einfache Klasse ist es, die resultierenden Werte nach der Ausführung der Abfrage zu akzeptieren.

können Sie prüfen, diese Anhänge [Linq-Abfrage, Ansicht Model, View enter image description here][1]