Asp.net mvc MVC传递viewmodel视图,其中viewmodel包含父值和子列表

Asp.net mvc MVC传递viewmodel视图,其中viewmodel包含父值和子列表,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,我的应用程序在一个设施内有多个区域。我试图将单个模型传递给包含设施值(设施id、设施名称)和区域列表的视图。我目前将区域列表作为表的实体模型的一种类型(区域列表) 我的viewmodel如下所示: public class AreaView { public string facility_name { get; set; } public int facility_id { get; set; } public int group_id { get; set; }

我的应用程序在一个设施内有多个区域。我试图将单个模型传递给包含设施值(设施id、设施名称)和区域列表的视图。我目前将区域列表作为表的实体模型的一种类型(区域列表)

我的viewmodel如下所示:

 public class AreaView
{

    public string facility_name { get; set; }
    public int facility_id { get; set; }
    public int group_id { get; set; }

    public IList<area_list> areas { get; set; }

}
我的观点(缩写):

@model skyenergy.Models.AreaView
设施:@Model.Facility\u名称
@foreach(模型区域中的var项){
@ActionLink(item.vendor\u name,“Details”,“Area”,new{id=item.vendor\u id},null)
}
我尝试了许多变体来完成下面的内容,这给了我许多错误,但最近的一个错误如下:

传递到字典中的模型项的类型为 'System.Data.Entity.Infrastructure.DbQuery'1[MyApp.Models.AreaView], 但此词典需要类型为的模型项 “MyApp.Models.AreaView”

我知道我没有传递视图所期望的正确类型,但我似乎无法理解:

  • 首先,viewmodel设置是否正确(如何混合值和子项列表)
  • 如何构造我的linq查询以使用 我所有的数据
  • 将其适当地(以正确的类型)传递给我的 看法
  • 我已经阅读了大约45篇关于Stackoverflow的文章,但似乎无法将它们拼凑起来完成上面的内容。如果有人有正确的解决方案(甚至是方向),我将非常感激


    谢谢您的帮助。

    我认为您应该在查询的末尾添加FirstOrDefault(),以返回
    区域视图

    public ActionResult List(int id = 0)
    {
    
        var model = (from f in areaDB.facility_list
                     where f.facility_id == id
                     select new AreaView
                     {
                         facility_id = f.facility_id,
                         facility_name = f.facility_name,
                         areas = (from a in areaDB.area_list
                                  orderby a.area_name
                                  where a.facility_id == id
                                  select a).ToList()
                     }).FirstOrDefault();
    
        return View(model);
    }
    

    我不会在同一个查询中合并这两个对象,我会这样做

    1) 选择id=xxxx的区域视图

    2) 选择id=xxxx的区域

    3) 为我的区域视图指定区域

    范例

    AreaView model = GetAreaView(id);
    
    model.Areas = GetAreas(id);
    
    return View(model);
    
    此外,请为您的当前代码尝试以下操作


    分开查询确实使它更容易。从你的例子来看,我的第一行代码看起来确实有点不同,有什么问题吗<代码>代码变量模型=(从areaDB.facility\u列表中的f中,其中f.facility\u id==id选择新的AreaView{…在调试模式下单步检查您的代码,这将使您很难知道您组合在一起的代码的价值。当您将代码分解并组合在一起时,这将使您的代码更简单、更易于测试
    public ActionResult List(int id = 0)
    {
    
        var model = (from f in areaDB.facility_list
                     where f.facility_id == id
                     select new AreaView
                     {
                         facility_id = f.facility_id,
                         facility_name = f.facility_name,
                         areas = (from a in areaDB.area_list
                                  orderby a.area_name
                                  where a.facility_id == id
                                  select a).ToList()
                     }).FirstOrDefault();
    
        return View(model);
    }
    
    AreaView model = GetAreaView(id);
    
    model.Areas = GetAreas(id);
    
    return View(model);
    
    return View(model.FirstOrDefault());