Создание объекта путем преобразования списка объектов в строку и массив int с помощью linq

#c# #linq-to-entities

#c# #linq-to-entities (linq-to-entities)

Вопрос:

Я пытаюсь выбрать столбцы из базы данных, а затем создать одно свойство массива для каждого столбца и создать один объект.

 public class Activity
{
    public string[] Quiz { get; set; }
    public int[] CompletedCount { get; set; }
}
  

Выходные данные базы данных из результатов будут возвращены в виде:

 IQueryable<QuizCompletedCount> results = _logContext.QuizCompletedCounts;
  

Я получил значение из базы данных в следующем формате.

 Week        | Completed
---------------------------
Week 1      |   107
Week 2      |   104
Week 3      |   87
Week 4      |   49
Week 5      |   6
  

Я пытался таким образом:

 List<int> activityCount = new List<int>();
List<string> activity = new List<string>();

foreach (var element in results)
{
    activity.Add(element.Week);
    activityCount.Add(element.Completed);
}

var obj = new QuizActivity();
obj.CompletedCount = activityCount.ToArray();
obj.Week = activity.ToArray();
  

Желаемый результат будет выглядеть следующим образом:

 string str = "{"Week":["Week 1","Week 2","Week 3","Week 4","Week 5"],"CompletedCount":[107,104,87,49,6]}";
  

Существует ли linq подход для выполнения этой задачи без использования foreach и многократного преобразования из списка в массив?

Ответ №1:

Вы можете создать что-то вроде этого:

 var result = new QuizActivity()
{
    Week = results.Select(x => x.Week).ToList(),
    CompletedCount = results.Select(x => x.Completed).ToList()
};
  

Комментарии:

1. может быть .ToArray() ?

2. Да, как вы пожелаете.