如何从集合中仅获取唯一节点 - IEnumerable <xnode> </xnode>

时间:2013-06-20 11:42:42

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

我从C#中的代码查询SQL数据库中的XML列。我正在尝试获取仅有唯一节点的列表。

在表中,有许多ItemCodes(PK),每个ItemCodes都有一个对应的ItemAttribute,它是XML类型列。

说XML文档中有10行和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到节点?

1 个答案:

答案 0 :(得分:0)

您应该EqualityComparer使用XNode

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