Я немного опоздал, однако я надеюсь, что это поможет вам оптимизировать ваш модельный подход.
Предположим, это ваша упрощенная модель:
public class AnswerModel
{
// Omitted for simplicity
}
public class QuestionModel
{
public List<AnswerModel> Answers { get; set; } = new List<AnswerModel>();
}
Вы не должны этого делать .ToList () до .Where () , потому что вы на самом деле материализуете всю сущность (она же таблица).Лучше, если вы используете соединение для выполнения запроса или если вы предпочитаете, чтобы вы могли использовать NavigationProperty, если он у вас есть, для отслеживания набора Ответов , относящихся к вашему Вопросу .
Основы LINQ
Однако я использую ваш подход с двумя разделенными запросами:
var model = new List<QuestionModel>();
var questions = _context.SurveyQuestions.Where(x => x.MainSurveyId == Surveyid).ToList();
var answers = _context.SurveyCompetitorAnswer.Where(x => x.MainSurveyId == Surveyid).ToList();
foreach (var q in questions){
var qModel = new QuestionModel();
qModel.Answers.AddRange(answers.Where(x => x.SurveyQuestionId == q.Id).ToList());
model.Add(qModel);
}
И с более простой и агрегированной моделью:
<tbody>
@foreach (var q in Model)
{
<tr>
<td scope="row">
@q.Question
</td>
@foreach (var a in q.Answers)
{
<td scope="row">
@a.Answer
</td>
}
</tr>
}
</tbody>
Если вы захотите поделиться своими объектами, мы можем оптимизировать запрос!
Удачного кодирования!