Linqを使用して、「name」属性に同じ値を持つ重複するXElementを除外しようとしています。
元のxml:
<foo>
<property name="John" value="Doe" id="1" />
<property name="Paul" value="Lee" id="1" />
<property name="Ken" value="Flow" id="1" />
<property name="Jane" value="Horace" id="1" />
<property name="Paul" value="Lee" id="1" />
... other xml properties with different id's
</foo>
// project elements in group into a new XElement
// (this is for another part of the code)
var props = group.data.Select( f => new XElement("property",
new XAttribute("name", f.Attribute("name").Value), f.Attribute("value"));
// filter out duplicates
props = props.Where(f => f.ElementsBeforeSelf()
.Where(g => g.Attribute("name").Value ==
f.Attribute("name").Value)
.Count() == 0);
残念ながら、フィルターステップは機能していません。Where()フィルターは、同じプロパティ名を持つ現在の要素の前にある要素をチェックし、それをゼロより大きいセットに含めて、現在の要素('f'と呼ばれる)を除外すると思いますが、それは起きていません。考え?