@fisker_f

Как вытащить данные из массива анонимных объектов?

Имеется массив данных с анонимными объектами, которые содержат 3 поля: Salary, Region, KindOfActivity. Необходимо вывести Salary в зависимости от Region и KindOfActivity. Например, если Region = Амурская область, а KindOfActivity = Образование, то нужно вывести Salary того элемента массива, где Region и KindOfActivity соответствуют этим данным. Через цикл не получается вывести.
var salaries = salaryDataParser.GetSalaryDataFromAverageSalaryExcelFile(workbook);
var salaryQuery = salaries.Select<>(s => new {s.Salary, s.Region});

Здесь решарпер говорит, что нужно какой то тип ввести между < и >, но я не понимаю какой.
Может кто-то сталкивался с подобной проблемой?

Данные, которые находятся в массиве
MAjMVKJCjk102e.jpg
  • Вопрос задан
  • 2587 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Sumor
<> у Select не нужно указывать - это элемент описания шаблонов: salaries.Select(s => s.Salary)
Чтобы фильтровать нужно использовать предикат Where:
var salaryQuery = salaries.Where(s => s.Region == "Регион" && s.KindOfActivity == "Виз занятий").Select(s => s.Salary);
Ответ написан
Во общем я знаю как решить эту проблему... но лучше сделайте отдельные классы.

Используйте Reflection чтобы достать нужные вам данные из анонимный типов, но использовать такую магию для такого случая просто не оправданно.
Ответ написан
Комментировать
virtyaluk
@virtyaluk
Создайте модель(класс) для хранения данных, а потом Select'ом создавайте экземпляры моделей для извлечения данных.

Например:
[code]
public class Model
{
. public string Field { get; set; }
}

//...

var models = salaries.Select(s => new Model{ Field = s.Region});
[/code]
Ответ написан
Комментировать
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
С CLR всё понятно, но что с DLR? Ой

IEnumerable<int> query = salaries.Where<dynamic>( s => {
    return s.Region == "Амурская область" && s.KindOfActivity == "Образование";
} ).Select<dynamic, int>( s => s.Salary );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы