我是新手,LINQ
目前正在使用它来处理 csv 格式的大数据集(半百万条记录)。我正在使用 aStreamReader
打开文件并实现IEnumerable<>
接口以填充结果。下面你可以看到阅读代码的主要部分:
IEnumerator<Person> IEnumerable<Person>.GetEnumerator()
{
using (StreamReader streamReader = new StreamReader(filename)){
streamReader.ReadLine();
while (!streamReader.EndOfStream){
string[] values = streamReader.ReadLine().Split(new char[] { ',' });
Person p = new Person();
p.Name = values[0];
p.Age = Convert.ToInt16(values[1]);
p.Score = Convert.ToDouble(values[2]);
p.PlotArea = Convert.ToInt16(values[3]);
p.ForecastConsumption = Convert.ToDouble(values[4]);
p.Postcode = values[5];
p.PropertyType = values[6];
p.Bedrooms = Convert.ToInt16(values[7]);
p.Occupancy = Convert.ToInt16(values[8]);
yield return p;
}
}
}
这是一个典型的查询:
var query = from person in reader
where person.Score > 36.55 && person.Bedrooms < 3
select person;
我的问题是,每次我想运行查询时StreamReader
都必须打开文件。有什么方法可以打开文件一次并运行多个查询?
仅供参考,我对 LINQ 印象深刻,运行上面的查询需要 1.2 秒。只是我将为数据集运行很多规则。