J'utilise Linq pour essayer de filtrer les XElements en double qui ont la même valeur pour l'attribut "name".Filtrage de XElements en double basé sur une valeur d'attribut d'une requête Linq
xml d'origine:
<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);
Malheureusement, l'étape filtre isnt de travail. Je penserais que le filtre de Where() vérifierait n'importe quel élément avant le courant qui a le même nom de propriété et l'inclut alors dans un ensemble qui était plus que zéro, excluant ainsi l'élément actuel (appelé «f»), mais c'est n'arrive pas. Pensées ?
Merci, j'aime cette méthode (et je l'ai utilisée) car elle est plus facile à implémenter sans changer ma logique de regroupement. Je suis curieux de savoir pourquoi ma méthode originale n'a pas fonctionné bien. –