LINQ对XML顺序是否依赖,您可以使用它来编号结果吗?

时间:2011-02-02 15:15:21

标签: c# linq lambda linq-to-xml

那么,我的第一个问题是LINQ to XML顺序依赖吗?

鉴于XML(实际文件的简化版本):

<root>
    <dl Id='111' Or='true' />
    <dl Id='112' Or='false' />
</root>

容器:

public class root
{
    public int Position { get; set; }
    public int Id { get; set; }
    public bool Or { get; set; }
}

读者代码:

var t = a.DescendantsAndSelf("root").Descendants("dl").Select(b => new root
{
    Id = int.Parse(b.Attribute("Id").Value),
    Or = bool.Parse(b.Attribute("Or").Value)
});

t中的根元素是否始终按照从文件中读出的顺序排列?如果没有,有没有办法强制执行订购?

第二个问题,有没有办法自动在读者代码中添加一个数字,说明是从第一个,第二个,第三个等根读出来的XML?因此,在此示例中,t将包含两个值为

的元素
  1. dl.Position = 1,dl.Id = 111,dl.Or = true
  2. dl.Position = 2,dl.Id = 112,dl.Or = false

1 个答案:

答案 0 :(得分:4)

是的,LINQ是“依赖于订单”。您的对象按照它们在XML文件中出现的顺序创建。

要获得该职位,请使用包含索引的Select版本:

var t = a.DescendantsAndSelf("root").Descendants("dl").Select((b,idx) => new root
{
    Id = int.Parse(b.Attribute("Id").Value),
    Or = bool.Parse(b.Attribute("Or").Value),
    Position = idx+1
});