在Linq中生成索引

时间:2009-07-08 13:51:35

标签: c# .net linq

我想使用Linq to XML输出一个排序列表,每个元素应该包含一个值及其在该列表上的索引。

换句话说,我想做这样的事情(xml的东西被镶边了):

 var Sample = new[] { "4", "3", "2", "1" }.AsQueryable();
 var r = (from o in Sample orderby o select new {obj=o, idx=?});

我不确定如何计算idx。

这可能还是我应该使用foreach循环?

2 个答案:

答案 0 :(得分:2)

您可以使用foreach循环,或者您可以使用此签名的Select重载:

public static IEnumerable<TResult> Select<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, int, TResult> selector
)

此版本的Select会将枚举中项目的索引传递给您。

你会这样称呼:

var Sample = new[] { "4", "3", "2", "1" };
var r = Sample.OrderBy(t => t).Select((t, i) => new {obj = t, idx = i});

答案 1 :(得分:1)

我不相信使用查询语法很容易实现。但是,如果使用lambda样式查询方法,则可以使用select的重载,它将索引作为第二个参数传递。

var r = Sample.OrderBy(x => x).Select((o,i) => new { obj=o, idx=i});