使用查询ASP MVC 3控制器聚合数据

时间:2012-10-04 01:02:47

标签: asp.net asp.net-mvc-3 linq

我有三张桌子:

  

PackageName:PackageNameID,PackageName

     

食物:FoodID,食物

     

PackageContent:PackageContentID,PackageNameID,FoodID,Qty

我要做的是显示以下内容:

  
      
  • PackageName(食物=数量,食物=数量)编辑|细节|删除

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

  •   
  • B(Rolls = 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'

此外,选择线无论如何......我需要指定食物的名称(“食物”表中的“食物”)和食物的数量(“数量”来自“PackageContent”表)到模型中的“FoodItems”列表。我该怎么做?

非常感谢!!

1 个答案:

答案 0 :(得分:0)

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

FoodItems = f.Food.ToList()

FoodItemsList<FoodItem>FoodItem是视图模型中的辅助类,而f.FoodFood实体对象的集合。

这样的事可能有用:

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

虽然我必须猜测你的实体类是什么样的。