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 + "'");
}
}
В основном я хочу знать, нахожусь ли я здесь на правильном пути. Когда у меня есть какой-либо объект данных о поставщике, с которым я получаю данные, мне нужно будет пройтись по нему, сравнить ученика с нашей записью ученика и принять решение об обновлении записей в нашем приложении.