如何从集合中获取唯一节点- IEnumerable

本文关键字:IEnumerable XNode 节点 唯一 集合 获取 | 更新日期: 2023-09-27 18:19:16

我正在从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到节点?

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

应该用EqualityComparer代替XNode

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