Asp.net mvc Linq查看错误,传递泛型列表:必需的IEnumerable

Asp.net mvc Linq查看错误,传递泛型列表:必需的IEnumerable,asp.net-mvc,linq-to-entities,viewmodel,Asp.net Mvc,Linq To Entities,Viewmodel,Visual Studio 2012互联网应用MVC4 C# 错误 System.InvalidOperationException:传递到字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery1”,但此字典需要“System.Collections.Generic.IEnumerable”类型的模型项 我的视图需要:@model IEnumerable这是一个数据模型,而不是ViewModel*这个视图也是我创建控制器时,UserProfile

Visual Studio 2012互联网应用MVC4 C#

错误

System.InvalidOperationException:传递到字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery
1”,但此字典需要“System.Collections.Generic.IEnumerable”类型的模型项

我的视图需要:
@model IEnumerable
这是一个数据模型,而不是ViewModel*这个视图也是我创建控制器时,
UserProfiles
模型生成的视图(带有
@Html.DisplayNameFor(Model=>Model.Company)的Standart Scaffolding
以及后来的
@foreach(模型中的var项){
来列出数据`

我的控制器尝试:

  • 尝试1感知(未返回列表)

  • 尝试2感知(不返回列表)

  • 尝试3感知(不返回列表)

  • 尝试4猜测这不是一个“真实”列表,仍然有错误

  • 对于尝试1-3

            List<UserProfiles> modelList = new List<UserProfiles>();
            modelList.Add(model.ToList());
    
    List modelList=new List();
    添加(model.ToList());
    
诸如此类,并为他们创建了一个Viewmodel

私有类WebAdminUsersLookup
{
//公共列表用户{get;set;}
public int UserID{get;set;}
公共字符串用户名{get;set;}
}
搜索的网站:


如果您的视图需要
IEnumerable
那么这是您应该传递给它的,而不是您在LINQ查询中投影的一些匿名对象。如果
IEnumerable
对于您的视图来说不够,并且您需要其他信息,那么您最好创建一个视图模型:

public class MyViewModel
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public int RolesCount { get; set; }
}
IEnumerable<MyViewModel> model = db
    .UserProfiles
    .Include(c => c.Roles)
    .Where(c => c.Roles.Any(up => up.RoleName != "Administrator"))
    .Select(c => new MyViewModel
    {
        UserID = c.UserID,
        UserName = c.UserName,
        RolesCount = c.Roles.Count()
     });

return View(model);
然后在此视图模型上投影:

public class MyViewModel
{
    public int UserID { get; set; }
    public string UserName { get; set; }
    public int RolesCount { get; set; }
}
IEnumerable<MyViewModel> model = db
    .UserProfiles
    .Include(c => c.Roles)
    .Where(c => c.Roles.Any(up => up.RoleName != "Administrator"))
    .Select(c => new MyViewModel
    {
        UserID = c.UserID,
        UserName = c.UserName,
        RolesCount = c.Roles.Count()
     });

return View(model);
IEnumerable模型=db
.UserProfiles
.Include(c=>c.Roles)
.Where(c=>c.Roles.Any(up=>up.RoleName!=“管理员”))
.选择(c=>new MyViewModel
{
UserID=c.UserID,
UserName=c.UserName,
RolesCount=c.Roles.Count()
});
返回视图(模型);
最后,将视图强类型化为与控制器操作中传递的视图相同的模型:

@model IEnuemrable<MyViewModel>
@model IEnuemrable

将模型转换为列表并将其传递到视图,如下所示:

 var model = db.UserProfiles
 .Include(c => c.Roles)
 .Where(c => c.Roles.Any(up => up.RoleName != "Administrator")).ToList();

 return View(model);

感谢您提供了有用的答案,但我也将其用于(需要IEnumerable的Standart view()):-sry没有指定。+1很好的回答谢谢,我仍然习惯于MVC中的类型,这对我来说很有效,只需要处理我的Linq查询,很明显,它不会显示任何人,不管是不是管理员角色,但这都不存在。谢谢!+1
IEnumerable<MyViewModel> model = db
    .UserProfiles
    .Include(c => c.Roles)
    .Where(c => c.Roles.Any(up => up.RoleName != "Administrator"))
    .Select(c => new MyViewModel
    {
        UserID = c.UserID,
        UserName = c.UserName,
        RolesCount = c.Roles.Count()
     });

return View(model);
@model IEnuemrable<MyViewModel>
 var model = db.UserProfiles
 .Include(c => c.Roles)
 .Where(c => c.Roles.Any(up => up.RoleName != "Administrator")).ToList();

 return View(model);