2013-06-20 40 views
0

我在C#查詢從代碼的SQL數據庫的XML列的後面。我試圖獲得唯一的節點列表。如何從一個集合只獨特的節點 - IEnumerable的<XNode>

在該表中,有許多ItemCodes(PK),每個與相應的ItemAttribute這是XML類型列。

說有10行和XML文檔中的3個節點。我從下面使用的方法中得到30個結果。我只想獨特的節點返回,但因爲有一個在每個節點都是唯一的數據,我得到這取決於在一個節點的值的唯一返回的任何數量的結果。

var data = (from x in Ctx.ItemAttributeDatas 
      select x).ToList(); 

var xml = from x in data 
      where x.AttributeData.Descendants() != null 
      select x.AttributeData as XElement; 

IEnumerable<XNode> nodes = (from x in xml.Nodes() 
          select x); 

這怎麼辦?我嘗試使用.Distinct(),但上述問題具有相同的結果。

此外,有沒有一個更清潔的方式,我可以得到的數據爲xml,以節點?

回答

0

您應該使用EqualityComparerXNode

IEnumerable<XNode> nodes = (from x in xml.Nodes() 
         select x).Distinct(XNode.EqualityComparer); 
+0

試過了,但還是同樣的結果。如果XML模式中只有三個節點(例如A,B,C),我只希望返回這三個節點。發生了什麼事,因爲有可能是在表的每一行中的一個節點相關聯的不同值,A可能會返回5倍,因爲有一個與每一行相關聯的不同值。 – MattSull

+0

您的答案適用於每個節點中的數據。我想要返回唯一的節點/標籤。任何其他想法? – MattSull

相關問題