Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将CSV读取到C对象,以便能够对其执行LINQ查询_C#_Linq_Csv - Fatal编程技术网

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

C# 将CSV读取到C对象,以便能够对其执行LINQ查询,c#,linq,csv,C#,Linq,Csv,我有一个csv文件,大约有10.000行,共20列。我需要将该文件读入一个C对象,以便能够对该对象执行LINQ查询。您喜欢什么?这一部分非常简单,因为您可以在IEnumerable上运行LINQ查询—换句话说,您可以对任何可以执行foreach循环的内容进行查询。有很多方法可以做到这一点 但是,首先,我假设您已经知道要处理的数据的模式,即,您已经知道第17列是生日之类的。如果您这样做了,您将能够非常快速地构建一个C数据对象,您的LINQ查询可以轻松地在其上运行。如果没有,则C数据对象可能是一个关

我有一个csv文件,大约有10.000行,共20列。我需要将该文件读入一个C对象,以便能够对该对象执行LINQ查询。您喜欢什么?

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

但是,首先,我假设您已经知道要处理的数据的模式,即,您已经知道第17列是生日之类的。如果您这样做了,您将能够非常快速地构建一个C数据对象,您的LINQ查询可以轻松地在其上运行。如果没有,则C数据对象可能是一个关联数组,例如带有字符串键的HashMap

如果必须对数据运行多个查询,只需逐个读取每一行,并将其放入列表实例中即可

但是,如果您必须只传递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();
}

除非您有一长串包含复杂数据的列,并且需要处理许多特殊情况,否则您可以自己编写一个简单的程序。你试过什么了吗?你不能把它转换成db吗?@Jelly:不,我不能用db。注意,在这样的情况下,最好不要有图书馆推荐问题或你喜欢什么问题。为什么我的帖子被否决了?你期待什么?对于那些对我的问题投了反对票的人:告诉我我的问题出了什么问题。
from data in ReadCSVFile(dataStream)