Asp.net 使用ASP MVC 3控制器的查询聚合数据
我有三张桌子: PackageName:PackageNameID,PackageName 食物:食物,食物 PackageContent:PackageContentID、PackageNameID、FoodID、数量 我想做的是显示如下内容: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(食品=数量,食品=数量)编辑|详细信息|删除
- 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指令或程序集引用?)谢谢,您的对象可能有其他属性,但正如我所说,我不得不猜测一下,因为我看不到你的班级模型。