分配顺序"行号"在linq输出

时间:2016-04-21 14:39:42

标签: c# linq row-number

我想访问linq查询中的行号。 网上有很多文章说明如何做到这一点,但有一个问题: 我想解决枚举"稍后"我希望它每次都分配相同的ID。 出于这个原因,这样的方法不起作用:

public IEnumerable<MyClass> GetThings(List<object> lst)
{
  int ID=0;
  return from i in lst
         select new MyClass(ID++, i);
}
public class MyClass
{
  public MyClass(int ID, object Stuff)
  { ... }
}
...
  var x = GetThings(SomeList);

(失败,因为每次通过迭代每个项目解析x获得不同的id)

2 个答案:

答案 0 :(得分:1)

原来解决这个问题非常简单 - 获取源集合的行号,而不是输出集合。 显然,这仅在您不进行过滤等时才有效,并且输出集合中的项目数与输入集合相同。除非你没有差距和/或重复

即。

public IEnumerable<MyClass> GetThings(List<object> lst)
{
  int ID=0;
  return from i in lst.Select((item,id)=>new {Item=item, ID=id})
         select new MyClass(i.ID, i.Item);
}
public class MyClass
{
  public MyClass(int ID, object Stuff)
  { ... }
}
...
  var x = GetThings(SomeList);

现在,每次迭代时,x中每个项目的ID都是相同的

答案 1 :(得分:1)

实际上你也可以使用传递索引的Select重载,如下所示:

lst.Select((o, i) => new MyClass(i, o));