Расщепление объекта с помощью отражения - PullRequest
0 голосов
/ 15 марта 2019

У меня есть следующий тип объекта

public class TestClass
{
    public string Property_1;
    public string Property_2;
    public int property_3;
    public DateTime TimeStame;
}

И мой источник данных возвращает список этих

List<TestClass> DataResponse;

Я пытаюсь сгруппировать все данные так, чтобы все Property_1 были сгруппированыпо дате, и то же самое для всех других свойств.По сути, я получаю:

Dictionary<DateTime, List<Property_1>>
Dictionary<DateTime, List<Property_2>>
Dictionary<DateTime, List<Property_3>>

Я могу перебрать свойства, используя:

foreach (var property in typeof(TestClass).GetProperties())
{

}

Но я немного не уверен, как использовать linq для заполнения словарей.

Любая помощь будет отличной!Спасибо

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Я думаю, что-то подобное должно сработать

var prop1 = new Dictionary<DateTime, List<string>>();
var prop2 = new Dictionary<DateTime, List<string>>();
var prop3 = new Dictionary<DateTime, List<int>>();

foreach (var grouped in list.GroupBy(l => l.TimeStamp))
{
    prop1.Add(grouped.Key, grouped.Select(i => i.Property_1).ToList());
    prop2.Add(grouped.Key, grouped.Select(i => i.Property_2).ToList());
    prop3.Add(grouped.Key, grouped.Select(i => i.Property_3).ToList());
}
0 голосов
/ 15 марта 2019

Оригинал

Отражение кажется излишним.Вы можете просто использовать ToDictionary

var result1 = DataResponse.ToDictionary(x => x.Property_1);
var result2 = DataResponse.ToDictionary(x => x.Property_2);
var result3 = DataResponse.ToDictionary(x => x.Property_3);

Если вам нужно больше детализации по группе, используйте GroupBy

, если вы хотите квантовать дату без времени, вы можете использовать x.Property_3.Date


Обновлено

Однако, продумав это, вы, вероятно, должны просто использовать GroupBy

var result1 = DataResponse.GroupBy(x => x.Property_1);
var result2 = DataResponse.GroupBy(x => x.Property_2);
var result3 = DataResponse.GroupBy(x => x.Property_3);

...

foreach(var result in result1)
{
    // do something with your groups
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...