Я пытаюсь организовать сгруппированные данные в моем контроллере для использования в моем представлении.Группировка связанных с внешним ключом данных для группировки данных по названию категории в представлении
У меня есть следующее решение на месте, но я получаю следующее сообщение об ошибке:
«Там уже находится открытое DataReader, связанное с этой командой, которая должна быть закрыта первой.»
Учитывая 2 набора связанных данных: Набор вопросов и категории они принадлежат, представлены следующим классам
Category
Question
Я хотел бы сгруппировать вопросы по своей категории, связанным внешний ключ
categoryId
Вот некоторые примеры данных:
Категории
category1 { Id = 1, Name = "Info about you" }
category2 { Id = 2, Name = "Info about your pet" }
Вопросы
question1 { categoryId = 1, Text = "What's your name?" }
question2 { categoryId = 1, Text = "What's your age?" }
question3 { categoryId = 2, Text = "What kind of pet do you have?"
question4 { categoryId = 2, Text = "What color is your pet?"
И желаемый результат HTML было бы что-то вроде
Информация о вас
- Wh на ваше имя?
- В каком возрасте?
Информация о вашем питомце
- Какой домашних животных вы имеете?
- Какой у вас домашний питомец?
Так что моя мысль поставить INFO название категории и связанные с ним вопросы в ViewModel, как показано ниже:
public class CategoriesWithQuestions() {
public string Name { get; set; }
public IEnumerable<Question> Questions { get; set; }
}
А потом в мой контроллер, я бы поставил данные в ViewModel с помощью запроса:
public ActionResult MyAction() {
var categoriesWithQuestions =
db.Categories()
.Select(category => new CategoriesWithQuestions()
{
Name = category.Name,
Questions = db.Questions().Where(Queryable => q.CategoryId == category.Id)
});
return View(categoriesWithQuestions);
}
и используйте ViewModel в представлении, обернув его и доступ к данной категории имя свойства и Associa Ted вопросы, как Accessors в классе ViewModel:
@model IEnumerable<App.ViewModels.CategoriesWithQuestions>
...
@foreach (var category in Model)
{
<h3>@category.Name</h3>
<ul>
@foreach (App.Models.Question Question question in category.Questions)
{
<li>@question.Text</li>
}
</ul>
}
Название происходит в порядке, но ошибка случается при попытке получить доступ к Вопросы в представлении.
Открыт для идей в определении моего текущего решения или альтернативных (лучших) решений.
Используйте 'MultipleActiveResultSets = true' в строке подключения. –