代码之家  ›  专栏  ›  技术社区  ›  Piotr Czapla

在Linq中生成索引

  •  1
  • Piotr Czapla  · 技术社区  · 15 年前

    我想使用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 回复  |  直到 15 年前
        1
  •  2
  •   casperOne    15 年前

    可以使用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});
    
        2
  •  1
  •   JaredPar    15 年前

    我认为用查询语法很难做到这一点。但是,如果使用lambda样式的查询方法,则它可以通过select的重载来实现,select将索引作为第二个参数传递。

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