Asp.net 使用ASP MVC 3控制器的查询聚合数据

Asp.net 使用ASP MVC 3控制器的查询聚合数据,asp.net,asp.net-mvc-3,linq,Asp.net,Asp.net Mvc 3,Linq,我有三张桌子: PackageName:PackageNameID,PackageName 食物:食物,食物 PackageContent:PackageContentID、PackageNameID、FoodID、数量 我想做的是显示如下内容: PackageName(食品=数量,食品=数量)编辑|详细信息|删除 A(洋葱=4,辣椒=3)编辑|细节|删除 B(卷=2,洋葱=2)编辑|细节|删除 以下是我的视图模型: public class PackageViewModel { pub

我有三张桌子:

PackageName:PackageNameID,PackageName

食物:食物,食物

PackageContent:PackageContentID、PackageNameID、FoodID、数量

我想做的是显示如下内容:

  • PackageName(食品=数量,食品=数量)编辑|详细信息|删除

  • A(洋葱=4,辣椒=3)编辑|细节|删除

  • B(卷=2,洋葱=2)编辑|细节|删除
以下是我的视图模型:

public class PackageViewModel
{
  public int ID { set;get;}
  public string Name { set;get;}
  public List<FoodItem> FoodItems { set;get;}
  public PackageViewModel()
  {
     FoodItems=new List<FoodItem>();
  }
}
public class FoodItem
{
  public string FoodName { set;get;}
  public int Quantity { set;get;}
}
公共类PackageViewModel
{
公共int ID{set;get;}
公共字符串名称{set;get;}
公共列表FoodItems{set;get;}
公共包视图模型()
{
FoodItems=新列表();
}
}
公共类食品
{
公共字符串FoodName{set;get;}
公共整数数量{set;get;}
}
以下是我的看法:

@model List<PackageViewModel>

@foreach(var item in Model)
{
  <tr>
   <td>@item.Name</td>
   <td>
       foreach(var food in item.FoodItems)
       {
         @food.FoodName - @food.Quantity
       }
   </td>
   <td>
      @Html.ActionLink("Edit","Edit",new {@id=item.ID})
   </td>
  </tr>
}
@型号列表
@foreach(模型中的var项目)
{
@项目名称
foreach(项目中的食品变量。食品数据项)
{
@food.FoodName-@food.Quantity
}
@ActionLink(“编辑”,“编辑”,新的{@id=item.id})
}
这是我在控制器中使用的查询:

List< PackageViewModel > listVM=new List< PackageViewModel >();

listVM =

        from pn in db.PackageNames
        from pc in db.PackageContents
            .Where(p => p.PackageNameID == pn.PackageNameID).DefaultIfEmpty()
        from f in db.Foods
            .Where(f => f.FoodID == pc.FoodID).DefaultIfEmpty()
        select new PackageViewModel { PackageNameID = pc.PackageNameID, PackageName = pn.PackageName, FoodItems = f.Food.ToList() };

    return View(listVM);  
ListlistVM=newlist();
listVM=
从数据库PackageNames中的pn
来自pc的db.PackageContents
.Where(p=>p.PackageNameID==pn.PackageNameID).DefaultIfEmpty()
从f到db.Foods
.Where(f=>f.FoodID==pc.FoodID).DefaultIfEmpty()
选择新的PackageViewModel{PackageNameID=pc.PackageNameID,PackageName=pn.PackageName,FoodItems=f.Food.ToList();
返回视图(listVM);
但是,我得到了以下错误: 无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”

此外,选择行无论如何都不对……我需要将食品的名称(“食品”表中的“食品”)和该食品的数量(“包装内容”表中的“数量”)分配给模型中的“食品数据项”列表。我该怎么做


非常感谢

您没有显示冲突的
列表
类型的类型参数,但我很确定这与零件有关

FoodItems = f.Food.ToList()
FoodItems
是一个
List
FoodItem
是视图模型中的一个辅助类,而
f.Food
是一个
Food
实体对象的集合

类似的方法可能会奏效:

FoodItems = f.Food.Select(fi => new FoodItem 
                                { 
                                   FoodName = fi.Name,
                                   Quantity = fi.Quantity
                                })

尽管我不得不猜测您的实体类是什么样子。

谢谢您的回复。这消除了错误,但现在我有两个新错误:错误1'char'不包含'Name'的定义,并且找不到接受第一个'char'类型参数的扩展方法'Name'(是否缺少using指令或程序集引用?)错误2'char'不包含'Quantity'的定义,并且找不到接受'char'类型的第一个参数的扩展方法'Quantity'(您是否缺少using指令或程序集引用?)谢谢,您的对象可能有其他属性,但正如我所说,我不得不猜测一下,因为我看不到你的班级模型。