У меня есть таблица с именем «UserAnswers». Ниже скриншот содержит данные таблицы
Я хочу получить данные по идентификатору опроса и группировать по столбцу Создано.
Например, есть пользователь с именем «amara@gmail.com». Этот пользователь содержит 4 записи для SurveyId. Я хочу получить это как ниже
Answers : [
{"2"},
{"1","0","1","1"},
{"1","2","4","3"},
{"Blue"}]
Но мой код возвращает этот массив для каждой строки. Я имел в виду возврат повторяющихся записей.
Вот мой код
var qstns = await (from uans in _context.UserAnswers
where uans.SurveyId == id
select new UserAnswersReturnDto
{
UserEmail = uans.CreatedBy,
Qustns = (from ans in _context.UserAnswers
where ans.CreatedBy == uans.CreatedBy
select new UserAnswersSet
{
QNo = ans.QNo,
Ansrs = JsonConvert.DeserializeObject<JArray>(string.IsNullOrEmpty(ans.Answers) ? "[]" : ans.Answers)
}).ToArray()
}).ToListAsync();
Итак, как решить эту проблему. Я открыл много вопросов для этой проблемы, но никто не ответил. Пожалуйста, помогите мне. Спасибо заранее
2 ответа
Вам необходимо сгруппировать данные перед возвратом:
Я использовал лямбда-нотацию LINQ, но это будет довольно легко перевести обратно на запрос, если вы так склонны:
var qstns = _context.UserAnswers.Where(uans => uans.SurveyId == id)
.GroupBy(uans => uans.CreatedBy)
.Select(grans => new UserAnswersReturnDto {
UserEmail = grans.Key,
Qustions = grans.Select(ans => new UserAnswersSet() {
QNo = ans.QNo,
Ansrs = ans.Answers
}).ToList()
} ).ToList();
У меня не было времени перепроверить это, но я надеюсь, что это поможет вам решить вашу проблему!
В вашем запросе linq нет группового оператора.
Похожие вопросы
Связанные вопросы
Новые вопросы
entity-framework
Entity Framework — это основанный на LINQ сопоставитель базы данных объектов для .NET. Он поддерживает отслеживание изменений, обновления и миграцию схем для многих баз данных. Также добавьте тег для конкретной версии.