CSV-файл транспонирован в ILookup

Поставщик предоставляет нам файл CSV каждую ночь. Нам нужно взять этот CSV, вытащить некоторые столбцы, а затем импортировать их в наше собственное приложение. CSV, как мы его получаем, выглядит примерно так:

StudentId, GradYear, 2014 Thing1, 2014 Thing2, 2015 Thing1, 2015 Thing2

и так далее, добавляя столбцы, казалось бы, к вечности. Когда я впервые увидел этот CSV, я хотел перенести его на 2 столбца:

StudentId, 123456
GradYear, 2016
2014 Thing1, overdue
2015 Thing1, completed

Я склонен использовать csvHelper для чтения этого файла и транспонировать его путем создания ILookup. Таким образом, у меня будет Lookup, который будет выглядеть так:

var theLookup = ILookup<string, KeyValuePair<string, string>>

Ключом является StudentId, а KeyValuePair - заголовком столбца: значение ячейки. Я почти могу решить это, используя словарь со счетчиком для ключа словаря, но я не могу совершить прыжок к Lookup с использованием StudentId в качестве ключа. Вот как я строю словарь:

Dictionary<int, List<KeyValuePair<string, string>>> vendorDictionary = new     Dictionary<int, List<KeyValuePair<string, string>>>();

using (var fileReader = File.OpenText(sourcePath))
using (var reader = new CsvHelper.CsvReader(fileReader))
{
     while (reader.Read())
    {
        var dynamicVendor = reader.GetRecord<dynamic>() as IDictionary<string, object>;

        foreach (var rec in dynamicVendor)
        {
            var recordDictionary = dynamicVendor.ToDictionary(k => k.Key, k => k.Value.ToString());
            vendorDictionary.Add(counter, recordDictionary.ToList());
            ++counter;
        }
    }

Я могу просмотреть записи с помощью следующего кода. Нужно ли делать версию этого foreach для преобразования в Lookup? Или я должен просто использовать словарь с некоторыми ", если это 'StudentId', то сделать его ключом?

foreach (var rec in vendorDictionary)
{
    Console.WriteLine("Vendor Dictionary record # " + rec.Key + " values are:");
    foreach (var value in rec.Value)
    {
       Console.WriteLine("Key: '" + value.Key + "' Value: '" + value.Value + "'");
    }                        
}

В основном я хочу знать, нахожусь ли я здесь на правильном пути. Когда у меня есть какой-либо объект данных о поставщике, с которым я получаю данные, мне нужно будет пройтись по нему, сравнить ученика с нашей записью ученика и принять решение об обновлении записей в нашем приложении.

0 ответов

Другие вопросы по тегам