2011-02-02 13 views
2

那麼,我的第一個問題,是LINQ to XML順序依賴?LINQ是否依賴於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根元素總是按照他們從文件中讀出的順序?如果沒有,有什麼辦法來強制排序?

第二個問題,是否有任何方法可以自動向讀者代碼添加一個數字,以表明它是否是第一,第二,第三等從root讀出的XML?所以在這個例子中有這麼t將包含與值的兩個元件

  1. dl.Position = 1,dl.Id = 111,dl.Or =真
  2. dl.Position = 2,dl.Id = 112,dl.Or = false

回答

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 
}); 
+0

非常感謝你,我不知道它是那麼簡單的索引添加到LINQ – Manatherin 2011-02-02 15:23:04

相關問題