LINQ to XML - 如何获取索引

时间:2010-09-20 13:34:00

标签: c# linq xml-serialization linq-to-xml indexing

我有一个Car对象数组,并使用以下代码我从这些对象创建XML文档。我已经设置了一个计数器变量i,以便能够索引文档中的Car元素。是否有不同的方法来获取当前处理元素的索引?

        int i = 0;
        XDocument doc =
            new XDocument(
                new XElement(
                    "Inventory",
                    from car in cars
                    select
                        new XElement("Car",
                            new XAttribute("ID", ++i), //<<== index here
                            new XElement("Color", car.Color),
                            new XElement("Make", car.Make),
                            new XElement("PetName", car.PetName)
                        )
                )
            );

我采用的方法运行正常,我只是想知道是否有一个神奇的单词或扩展方法会在不增加计数器变量的情况下产生索引?

2 个答案:

答案 0 :(得分:4)

是的 - 不要使用查询表达式;使用overload of Select which provides an index。这将替换您的查询表达式:

cars.Select((car, index) =>
    new XElement("Car",
        new XAttribute("ID", index),
        new XElement("Color", car.Color),
        new XElement("Make", car.Make),
        new XElement("PetName", car.PetName)
    ))

查询表达式中不支持各种重载 - 绝对值得熟悉“点符号”(或任何你想称之为)和查询表达式。

答案 1 :(得分:2)

有一个overload of Select which takes an index,因此您可以将查询表达式更改为:

cars.Select((c, i) => new XElement("Car", new XAttribute("ID", i) ...))