2016-08-19 4 views
0

У меня есть запрос LINQ в моем контроллере, у которого есть соединение, которое выбирает все записи. Затем я передаю модель ReportCompletionStatus.AsEnumerable() к моему представлению. Но я получаю исключение fowlling ..Требуется элемент модели типа 'System.Collections.Generic.IEnumerable`1

Модели элемента передается в словарь типа «System.Data.Entity.Infrastructure.DbQuery`1

но этот словарь требует модель элемента типа «System.Collections.Generic.IEnumerable`1

Я устанавливаю модель AsEnumerable() и мой взгляд ожидает @model IEnumerable, так что я до сих пор не знаю, почему это complaning ...

Контроллер

 var ReportCompletionStatus = from r in db.Report_Completion_Status 
            join rc in db.Report_Category 
            on r.Report_Category equals rc.ReportCategoryID 
            select new 
            { 
             r.Report_Num, 
             rc.ReportCategory, 
             r.Report_Sub_Category, 
             r.Report_Name, 
             r.Report_Owner, 
             r.Report_Link, 
             r.Report_Description, 
             r.Last_Published, 
             r.Previous_Published, 
             r.Published_By, 
             r.Previous_Published_By, 
             r.Last_Edited, 
             r.Edited_By 
            }; 



     return View(ReportCompletionStatus.AsEnumerable()); 

Модель

@model IEnumerable<WebReportingTool.Report_Completion_Status> 
+0

Пожалуйста, обратите внимание, что тег модель-представление-контроллер Ф.О. r вопросы о шаблоне. Существует определенный тег для реализации ASP.NET-MVC. –

ответ

2

С вашим select new, вы проецировать на анонимный тип, а не к IEnumerable<WebReportingTool.Report_Completion_Status>

Вам необходимо создать класс ViewModel (в качестве проекции имеет данные как от Report_Completion_Status, так и от Report_Category) и использовать его для проекции и для вашей модели View.

класс

public class SomeViewModel { 
    public int ReportNum {get;set;} 
    public string ReportCategory {get;set; 
    //etc. 
} 

проекции

select new SomeViewModel 
       { 
        ReportNum = r.Report_Num, 
        ReportCategory = rc.ReportCategory, 
        //etc.       
       }; 

вид

@model IEnumerable<SomeViewModel> 

К слову, AsEnumerableis not necessary.

+0

Спасибо @ Raphaël Althaus за ваш ответ. Я создал новый класс ViewModel, как вы описали, но в проекции poriton кода я теперь получаю «Не могу инициализировать тип SomeViewModel с инициализатором коллекции, потому что он не реализует« System.Collections.IEnumerable » – GRU119

0

Вот как я получил его на работу.

Модель

public class ReportCategoryListModel 
{ 
     public int Report_Num { get; set; } 
     public string ReportCategory { get; set; } 
     public string Report_Sub_Category { get; set; } 
     public string Report_Name { get; set; } 
     public string Report_Owner { get; set; } 
     public string Report_Link { get; set; } 
     public string Report_Description { get; set; } 
     public Nullable<System.DateTime> Last_Published { get; set; } 
     public Nullable<System.DateTime> Previous_Published { get; set; } 
     public Nullable<int> Published_By { get; set; } 
     public Nullable<int> Previous_Published_By { get; set; } 
     public Nullable<System.DateTime> Last_Edited { get; set; } 
     public Nullable<int> Edited_By { get; set; } 
} 

Контроллер

var ReportCompletionStatus = from r in db.Report_Completion_Status 
            join rc in db.Report_Category 
            on r.Report_Category equals rc.ReportCategoryID 
            select new ReportCategoryListModel 
            { 
             Report_Num = r.Report_Num, 
             ReportCategory = rc.ReportCategory, 
             Report_Sub_Category = r.Report_Sub_Category, 
             Report_Name = r.Report_Name, 
             Report_Owner = r.Report_Owner, 
             Report_Link = r.Report_Link, 
             Report_Description = r.Report_Description, 
             Last_Published = r.Last_Published, 
             Previous_Published= r.Previous_Published, 
             Published_By = r.Published_By, 
             Previous_Published_By = r.Previous_Published_By, 
             Last_Edited = r.Last_Edited, 
             Edited_By = r.Edited_By 
            }; 

return View(ReportCompletionStatus); 

Просмотр

@model IEnumerable<WebReportingTool.Models.ReportCategoryListModel>