LINQ の結果をループすることが神経質になっている状況があります。ここに私のシナリオがあります:
データベースから取得したDataTableがあり、そこからデータを次のように取得しています。
var results = from d in dtAllData.AsEnumerable()
select new MyType
{
ID = d.Field<Decimal>("ID"),
Name = d.Field<string>("Name")
}
次のように並べ替え順序に応じて注文した後:
if(orderBy != "")
{
string[] ord = orderBy.Split(' ');
if (ord != null && ord.Length == 2 && ord[0] != "")
{
if (ord[1].ToLower() != "desc")
{
results = from sorted in results
orderby GetPropertyValue(sorted, ord[0])
select sorted;
}
else
{
results = from sorted in results
orderby GetPropertyValue(sorted, ord[0]) descending
select sorted;
}
}
}
GetPropertyValue メソッドは次のとおりです。
private object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
return propertyInfo.GetValue(obj, null);
}
この後、次のような最初のページの 25 レコードを取り出しています。
results = from sorted in results
.Skip(0)
.Take(25)
select sorted;
これまでのところ順調に進んでいます。この結果をメソッドに渡してデータを操作し、目的のデータを返す必要があります。このメソッドでは、これらの 25 レコードをループしたいときに、十分な時間。私のメソッド定義は次のとおりです。
public MyTypeCollection GetMyTypes(IEnumerable<MyType> myData, String dateFormat, String offset)
試してみforeach
ましたが、マシンで8〜10秒かかります。次の行で時間がかかります:
foreach(var _data in myData)
while ループを試してみましたが、同じことをしています。次のように使用しました。
var enumerator = myData.GetEnumerator();
while(enumerator.MoveNext())
{
int n = enumerator.Current;
Console.WriteLine(n);
}
このコードには時間がかかっていますMoveNext
for
私がループに行ったよりも:
int length = myData.Count();
for (int i = 0; i < 25;i++ )
{
var temp = myData.ElementAt(i);
}
このコードには時間がかかっていますElementAt
私が間違っていることを教えてください。VS 2008 で Framework 3.5 を使用しています。
前もって感謝します