У меня есть таблица с именем «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
DevAra 15 Авг 2019 в 09:55

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();

У меня не было времени перепроверить это, но я надеюсь, что это поможет вам решить вашу проблему!

2
akseli 16 Авг 2019 в 18:28

В вашем запросе linq нет группового оператора.

0
Jon Ryan 16 Авг 2019 в 17:11