将CSV读取到C#对象,以便能够对其进行LINQ查询
本文关键字:查询 LINQ 读取 CSV 对象 | 更新日期: 2023-09-27 18:23:56
我有一个csv文件,在20列中舍入了大约10000行。我需要将此文件读取到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)