行。我有3节课。 Category,SubCategory和SubSubcategory。
我想(使用剃刀)显示它们。但是,我的语法不太可能:
我想:
<ul>
@foreach (var item in Model) {
<li>
@Html.DisplayFor(modelItem => item.Name)
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
<ul>
@foreach (var sc in item.SubCategories)
{
@Html.Display(sc.Name)
foreach (var ssc in sc.SubSubCategories)
{
@Html.Display(ssc.Name)
}
}
</ul>
</li>
}
</ul>
但是它没有填充SubCategory和SubSubCategory。我试过从控制器端给它:db.Category.ToList(); (但这只给了我第一级.. SubCategory和SubSubCategory被忽略。
我尝试使用db.Category.Include(“SubCategory”)。ToList();但它不喜欢这个。我如何填充这3个级别?
答案 0 :(得分:0)
我不熟悉EF,但我知道在LINQ-to-SQL中,您可以使用DataLoadOptions来包含其他连接数据:
HelpMeContext db = new HelpMeContext();
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Category>(c => c.SubCategories);
options.LoadWith<SubCategory>(sc => sc.SubSubCategories);
db.LoadOptions = options;
// now this should load subcategories and sub-subcategories with it.
var model = db.Category.ToList();
您也可以尝试将所有数据选择为匿名类型,但阅读和使用它也有点麻烦:
var model = db.Category
.Select(c =>
new { Category = c, SubCategories = c.SubCategories.Select(sc =>
new { SubCategory = sc, SubSubCategories = sc.SubSubCategories }
)}
).ToList();
你可以说:
@foreach (var item in Model) {
//item.Category.Name
@foreach (var sc in item.SubCategories) {
//sc.SubCategory.Name
@foreach (var ssc in sc.SubSubCategories) [
/ssc.Name
}
}
}
答案 1 :(得分:0)
对视图执行查询是不对的。更好的选择是形成ViewModel,而不是将其传递给视图。
为了打开多个实体的急切加载,尝试使用.Include()传递查询路径:
db.Category.Include("SubCategory.SubSubCategory").ToList();
或者如果您正在使用DbContext:
db.Category.Include(s=>SubCategory.Select(ss=>ss.SubCategory).ToList();
<。> .Include的MSDN文档说:
路径包罗万象。例如,如果包含呼叫指示 包含(“Orders.OrderLines”),不仅包括OrderLines, 还有订单