IEnumerable集合的动态递增属性?

时间:2014-01-09 05:57:50

标签: c# .net linq c#-4.0

我有一个根据条件任意排序的集合。我的类有一个“Ordinal”int属性,我想在收集订单后动态填充。以下是我到目前为止的情况:

var result = new List<MyClass>();
foreach (var x in items)
{
  x.TestA = x.TestA;
  x.TestB = x.TestB;
  x.TestC = x.TestC;
}
...
var ordered = result.AsEnumerable();
if (...) ordered.OrderBy(x => x.TestA);
else if (...) ordered.OrderBy(x => x.TestB);
else if (...) ordered.OrderBy(x => x.TestC);
...
return ordered.ToList()

在返回有序列表之前,使用索引位置填充集合中“MyClass”对象的“Ordinal”属性的最佳方法是什么?因为我有数千条记录,所以我不愿意在最后创建另一个循环。这是唯一的方法吗?感谢您的帮助或建议。

1 个答案:

答案 0 :(得分:1)

我看不到任何其他方式,然后再次迭代排序集合。您可以使用LINQ使其看起来更好,但它仍然会在内部进行迭代:

return ordered.Select((x, i) => { x.Ordinal = i; return x; }).ToList()

仅当您的MyClass确实是参考类型(class)时,它才有效。