У меня есть базовая модель магазина.У меня есть Предметы, Предметы имеют категорию, а категории имеют меню.Я хочу составить список пунктов данного меню, сгруппированных по категориям элементов, чтобы он записал название категории, затем перечислил элементы под ним и перешел к следующей категории.Меня побеждает синтаксис.Пожалуйста, помогите.
Элементы:
public class Item
{
public int ID { get; set; }
public string Name { get; set; }
public double Price { get; set; }
public int Order { get; set; }
public bool Active { get; set; }
public Category Category { get; set; }
}
Категории:
public class Category
{
public int ID { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public int Order { get; set; }
public Menu Menu { get; set; }
}
Меню:
public class Menu
{
public int ID { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public int Order { get; set; }
}
В контроллере у меня есть оператор linq:
var model = from i in _db.Items
join c in _db.Categories on i.Category.ID equals c.ID
join m in _db.Menus on c.Menu.ID equals m.ID
where m.Name == menuName
select i;
Я почти уверен, что это не сработает с select i, но у меня нет идей, и это его текущее состояние.
В моем представлении:
@model IEnumerable<MyStore.Models.Item>
И я перепробовал все, что мог придумать, чтобы заставить работать группу, но ничего не получилось.Я даже попытался просто установить переменную в currentCategoryID и проверить, изменилось ли оно, а затем записать имя категории, но он выдает ошибку, когда нажимает @ item.Category.Name, говоря, что ссылка на объект не установлена для экземпляра объекта.
Я полностью потерян.: (
ОБНОВЛЕНИЕ ОК, эта часть работает, теперь есть способ сделать этот цикл более элегантным? Мне не нравится temp var, чтобы проверить, является ли это новой категорией.
int currentCategory = 0;
foreach (var item in Model)
{
if (!item.Category.ID.Equals(currentCategory))
{
<h3>@item.Category.Name</h3>
currentCategory = item.Category.ID;
}
<div>
@Html.DisplayFor(modelItem => item.Name)
</div>
<div>
</div>
}