我有csv文件與30 000行。我必須根據許多條件選擇許多值,所以許多循環都被忽略了,「if」我決定使用linq。我已經寫了課,讀csv。它實現了IEnumerable與linq一起使用。這是我的調查員:是否可以更改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中選擇列A中的最大值; 150行。
max = (from CSVRow r in csv where r.ID > 100 && r.ID < 150 select r).Max(y=>y["A"]);
這是可行的,但在30個000行,而不是48 正如我所說的,我可以用循環,但只有在這個例子的情況下,條件是「殘酷」的最大值LINQ搜索:)
有什麼方法可以重寫linq集合搜索。類似於:查看我的枚舉器上使用的查詢,看看「where」中是否包含「row ID filter」的任何linq條件,並根據此情況提供另一個數據。
我不想將部分數據複製到另一個數組/集合,問題不在我的csv閱讀器中。通過id訪問每一行很快,唯一的問題是當你訪問所有30 000個。 任何幫助appriciated :-)
順便說一句,你應該實現'IEnumerable'。 –
SLaks
這是如何實現的 - >'新的CSVRow(_index,_csv)'。隨機訪問還是順序訪問? – Tilak
是否確定linq to objects將Max應用於所有記錄,而不僅僅是這48個?奇怪的是,它應該按順序應用運營商。我的猜測是你的調查員只是很慢。 –