我有一种情况,循环遍历 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 中使用框架 3.5。
提前致谢