Есть ли способ отсортировать это в запросе?
Просмотр моделей курса:
public class CategoryViewModel
{
public string Title { get; set; }
public IEnumerable<ProductViewModel> Products { get; set; }
}
public class ProductViewModel
{
public string Description { get; set; }
}
и в вашем действии контроллера сделайте необходимое для заполнения этой модели представления:
public ActionResult Index()
{
var categories =
(from category in context.Categories
orderby category.SortOrder ascending
select new CategoryViewModel
{
Title = category.Title,
Products = category
.Products
.OrderBy(p => p.SortOrder)
.Select(p => new ProductViewModel
{
Description = p.Description
})
}).ToList();
).ToList();
return View(categories);
}
и в представлении Index.cshtml
вы можете избавиться от уродливых циклов и использовать шаблоны отображения:
@model IEnumerable<CategoryViewModel>
<ul>
@Html.DisplayForModel()
</ul>
и внутри шаблона отображения для категории (~/Views/Shared/CategoryViewModel.cshtml
)
@model CategoryViewModel
<li>
@Html.DisplayFor(x => x.Title)
<ul>
@Html.DisplayFor(x => x.Products)
</ul>
</li>
и внутри шаблона отображения для продукта (~/Views/Shared/ProductViewModel.cshtml
)
@model ProductViewModel
<li>
@Html.DisplayFor(x => x.Description)
</li>
В качестве дальнейшего улучшения действия контроллера вы можете использовать AutoMapper для сопоставления между вашими моделями доменов (объектами EF) и моделями представления, которые должны быть переданы в представление.