私は初めてでLINQ
、現在、csv形式(50万レコード)の大きなデータセットを処理するためにそれを使用しています。結果を入力するために、を使用しStreamReader
てファイルを開き、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秒かかります。データセットに対して多くのルールを実行するだけです。