转换为ILookup的CSV文件

时间:2015-11-13 00:56:41

标签: c#-4.0 idictionary csvhelper 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来转置它。所以我会看起来像:

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

密钥是StudentId,KeyValuePair是列标题:单元格值。 我几乎可以使用字典,使用字典键的计数器来解决这个问题,但是我无法通过StudentId作为键来实现Lookup的跳跃。 以下是我构建词典的方法:

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 个答案:

没有答案