我有 30 000 行的 csv 文件。我必须根据许多条件选择许多值,因此插入了许多循环和“if”我决定使用 linq。我已经写了类来阅读 csv。它实现了 IEnumerable 以与 linq 一起使用。这是我的枚举器:
class CSVEnumerator : IEnumerator
{
private CSVReader _csv;
private int _index;
public CSVEnumerator(CSVReader csv)
{
_csv = csv;
_index = -1;
}
public void Reset(){_index = -1;}
public object Current
{
get
{
return new CSVRow(_index,_csv);
}
}
public bool MoveNext()
{
return ++_index < _csv.TotalRows;
}
}
它正在工作,但速度很慢。假设我想在 100;150 行范围内的 A 列中选择最大值。
max = (from CSVRow r in csv where r.ID > 100 && r.ID < 150 select r).Max(y=>y["A"]);
这将起作用,但是 linq 在 30 000 行而不是 48 行中搜索最大值。正如我所说,我可以使用循环,但仅在本例中,条件是“残酷的”:)
有没有办法覆盖 linq 集合搜索。类似于:查看我的枚举器上使用的查询,查看“where”中的任何 linq 条件是否包含“行 ID 过滤器”并基于此提供另一个数据。
我不想将部分数据复制到另一个数组/集合,问题不在我的 csv 阅读器中。通过 id 访问每一行很快,唯一的问题是当您访问所有 30 000 行时。任何帮助appriciated :-)