2014-12-04 46 views
6

我有以下代码:IEnumerable.Select具有索引

var accidents = text.Skip(NumberOfAccidentsLine + 1).Take(numberOfAccidentsInFile).ToArray(); 

其中事故是一个字符串数组。

我想要从字符串数组中的LINQ转型意外对象的数组如下:

return accidents.Select(t => new Accident() {Id = i, Name = t.Replace("\"", string.Empty)}).ToArray(); 

如何从事故阵列使用LINQ检索索引我或我必须去老套?

+2

你想从'事故'数组本身的索引,或从原来的'文本'枚举索引?如果前者,那么Marcin的答案是好的。如果是后者,那么你需要在引入索引的初始'Select()'之后执行'Skip()'和'Take()'。 – 2014-12-04 02:12:49

回答

13

我不确定你要找什么样的索引,但如果它只是一组连续的数字,那么你很幸运。有Select重载正是这么做的:

return accidents.Select((t, i) => new Accident() {Id = i, Name = t.Replace("\"", string.Empty)}).ToArray(); 

据预计,需要两个参数的委托 - 项目和它的索引。

+0

只需要一组连续的数字就可以了,谢谢。 – 2014-12-04 15:57:28

1

使用Enumerable.Range生成的ID值,然后使用当前值索引到您的字符串数组:

Enumerable.Range(0, accidents.Length).Select(f => new Accident() { Id = f, Name = accidents[f] }) 
0

可能是这个LINQ查询将帮助你找到索引的格式化名称:

var accidents=(from acc in accidents 
    select new { 
     id=accidents.IndexOf(acc), 
     Name = acc.Replace("\"", string.Empty) 
    }).ToArray() 

,或者您也可以,如果你想产生是在IEnumerable的格式使用.ToList()的情况。