将CSV读取到C#对象,以便能够对其进行LINQ查询

本文关键字:查询 LINQ 读取 CSV 对象 | 更新日期: 2023-09-27 18:23:56

我有一个csv文件,在20列中舍入了大约10000行。我需要将此文件读取到C#对象中,以便能够对此对象执行LINQ查询。你喜欢什么?

将CSV读取到C#对象,以便能够对其进行LINQ查询

这一部分非常简单,因为您可以在IEnumerable<T>上运行LINQ查询——换句话说,您可以在任何可以执行foreach循环的内容上进行查询。有很多方法可以做到这一点。

然而,首先,我假设您已经知道要处理的数据的模式(即,您已经知道第17列是出生日期或类似的数据)。如果你这样做了,你将能够非常快速地构建一个C#数据对象,你的LINQ查询可以很容易地在上面运行。如果你没有,你的C#数据对象可能会是一个关联数组(比如一个带有string键的HashMap)。

如果必须对数据运行多个查询,可以简单地逐个读取每一行,并将其放入List<T>实例中。

但是,如果您必须只通过一次CSV数据,您可以创建一个迭代器方法,并只逐行读取:

public IEnumerable<DataObject> ReadCSVFile(Stream input)
{
  StreamReader reader = new StreamReader(input);
  string line;
  while ((line = reader.ReadLine()) != null) // this sets and checks line at the same time
  {
    DataObject data = new DataObject();
    // ... fill in the parameters of your data object here ...
    // this will return the single data object,
    // let your LINQ query process it, and then continue the loop
    yield return data;
  }
  reader.Close();
}

然后,当您执行LINQ查询时,您调用该方法,如中所示

from data in ReadCSVFile(dataStream)