使用 LINQ 通过 IEnumerable 查询时 XElement 的位置
我有一个通过 IEnumberable 进行查询的 linq 查询。当我的 where 子句有一个匹配元素时,我想知道该元素在 IEnumberable 中的位置。
var result = from e in elements
where (string) e.Attribute("class") == "something"
select e.Position();
e.Position() 当然无法编译。 e.Position() 的值将是所选元素在元素 IEnumberable 中的位置。
关于如何做到这一点有什么想法吗?
I have a linq query that is querying over IEnumberable. When I have a matching element for my where clause I would like to know the position of the element in the IEnumberable.
var result = from e in elements
where (string) e.Attribute("class") == "something"
select e.Position();
The e.Position() of course does not compile. The value of e.Position() would be the position of the selected element in the elements IEnumberable.
Any ideas on how to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用重载的 Select 方法,该方法允许索引该功能在查询语法中不可用。
You need to use the overloaded Select method that allows for an index since that capability is not available in query syntax.
如果您使用的是 .NET 4.0,那么您可以使用(新的)
Zip
方法并使用查询语法编写相同的内容。它创建了一些临时对象,因此效率不高,但有些人可能会发现它更具可读性:它使用生成的数字序列(与集合的长度具有相同的范围)“压缩”输入集合。然后,您可以使用 Tuple 类(这就是我所做的)来存储组合值,也可以使用匿名类型。
If you're using .NET 4.0 then you can use the (new)
Zip
method and write the same thing using the query syntax as well. It creates some temporary objects, so it isn't as efficient, but some people may find it more readable:It 'zips' the input collection with a generated sequence of numbers (with the same range as is the length of the collection). Then you can store the combined value either using the
Tuple
class (that's what I did) or you could use anonymous type.