C# 将CSV读取到C对象,以便能够对其执行LINQ查询
我有一个csv文件,大约有10.000行,共20列。我需要将该文件读入一个C对象,以便能够对该对象执行LINQ查询。您喜欢什么?这一部分非常简单,因为您可以在IEnumerable上运行LINQ查询—换句话说,您可以对任何可以执行foreach循环的内容进行查询。有很多方法可以做到这一点 但是,首先,我假设您已经知道要处理的数据的模式,即,您已经知道第17列是生日之类的。如果您这样做了,您将能够非常快速地构建一个C数据对象,您的LINQ查询可以轻松地在其上运行。如果没有,则C数据对象可能是一个关联数组,例如带有字符串键的HashMap 如果必须对数据运行多个查询,只需逐个读取每一行,并将其放入列表实例中即可 但是,如果您必须只传递CSV数据一次,则可以创建迭代器方法,并仅逐行读取:C# 将CSV读取到C对象,以便能够对其执行LINQ查询,c#,linq,csv,C#,Linq,Csv,我有一个csv文件,大约有10.000行,共20列。我需要将该文件读入一个C对象,以便能够对该对象执行LINQ查询。您喜欢什么?这一部分非常简单,因为您可以在IEnumerable上运行LINQ查询—换句话说,您可以对任何可以执行foreach循环的内容进行查询。有很多方法可以做到这一点 但是,首先,我假设您已经知道要处理的数据的模式,即,您已经知道第17列是生日之类的。如果您这样做了,您将能够非常快速地构建一个C数据对象,您的LINQ查询可以轻松地在其上运行。如果没有,则C数据对象可能是一个关
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();
}
除非您有一长串包含复杂数据的列,并且需要处理许多特殊情况,否则您可以自己编写一个简单的程序。你试过什么了吗?你不能把它转换成db吗?@Jelly:不,我不能用db。注意,在这样的情况下,最好不要有图书馆推荐问题或你喜欢什么问题。为什么我的帖子被否决了?你期待什么?对于那些对我的问题投了反对票的人:告诉我我的问题出了什么问题。
from data in ReadCSVFile(dataStream)