0

我有三张桌子:

包名:包名ID、包名

食物:食物ID,食物

PackageContent:PackageContentID、PackageNameID、FoodID、Qty

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

  • 包装名称(食物=数量,食物=数量) 编辑 | 详情 | 删除

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

这是我的看法:

@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>
}

这是我在控制器中使用的查询:

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);  

但是,我收到以下错误: 无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”

此外,无论如何选择行都不正确....我需要指定食物的名称(“食物”表中的“食物”)和该食物的数量(“包装内容”中的“数量” ”表)添加到模型中的“FoodItems”列表中。我该怎么做呢?

非常感谢!!

4

1 回答 1

0

您没有显示冲突List类型的类型参数,但我很确定这与该部分有关

FoodItems = f.Food.ToList()

FoodItemsis a List<FoodItem>,FoodItem是视图模型中的辅助类,whilef.FoodFood实体对象的集合。

像这样的东西可能有效:

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

尽管我必须猜测您的实体类是什么样的。

于 2012-10-04T21:18:26.620 回答