2013-01-04 23 views
9

Tôi có một truy vấn LINQ trả về kết quả phù hợp với lớp học PictureGallery của tôi. Tôi cần tải chúng vào số ViewModel nhưng tôi nhận được lỗi sau:Làm cách nào để tải các kết quả LINQ này vào lớp ViewModel của tôi?

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

Tôi khá mới ở C#. Làm cách nào để truyền "Kết quả" vào lớp xem hình ảnh "PictureGallery" của tôi?

Cảm ơn trước!

Bộ điều khiển:

//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; } 
} 

Trả lời

16

rephrase truy vấn của bạn như:

//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 mà làm việc! Cảm ơn – Maddhacker24

2

Bạn đang cố gắng thiết lập một IEnumerable<PictureGallery> một IQueryable<anonymous>. Bạn cần phải chuyển đổi để đúng loại:

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

Sau đó, Bạn có thể viết var list = result.ToList();

Sau đó, chuyển nó để xem như thế này return View (danh sách);

Bạn có thể chấp nhận nó theo quan điểm của bạn như Danh sách @model này

đâu ViewModel là một lớp đơn giản với tính để chấp nhận các giá trị kết quả sau khi thực hiện truy vấn.

Bạn có thể kiểm tra các file đính kèm [LINQ truy vấn, Xem Model, View enter image description here][1]

Các vấn đề liên quan