Sélectionnez des XElements uniques (par attribut) avec un filtre utilisant LinqToXml

StackOverflow https://stackoverflow.com/questions/345025

  •  19-08-2019
  •  | 
  •  

Question

J'ai un document XML ressemblant à ceci:

<items>
 <item cat="1" owner="14">bla</item>
 <item cat="1" owner="9">bla</item>
 <item cat="1" owner="14">bla</item>
 <item cat="2" owner="12">bla</item>
 <item cat="2" owner="12">bla</item>
</items>

Maintenant, j'aimerais obtenir tous les propriétaires uniques (il me manque en fait uniquement la valeur d'attribut du propriétaire) appartenant à une catégorie spécifiée à l'aide d'une requête linq. Dans mon exemple, la requête pour la catégorie 1 renverrait une liste contenant 9 et 14. Comment puis-je faire cela? La syntaxe Linq serait préférable à Lambdas. Merci d'avance;)

Était-ce utile?

La solution

En supposant que le fragment se trouve dans itemsElement:

var distinctOwners = (from item in itemsElement.Element("item") 
 where itemElements.Attribute("cat") == 1 
select item.Attribute("owner")).Distinct();

Excuses pour le formatage et l'indentation!

Autres conseils

Essayez cette fonction: -

static IEnumerable<int> GetOwners(XDocument doc, string cat)
{
    return from item in doc.Descendants("item")
        where item.Attribute("cat").Value == cat
        select (int)item.Attribute("owner")).Distinct();

}
  XElement ele = XElement.Parse(@"<items><item cat=""1"" owner=""14"">bla</item><item cat=""1"" owner=""9"">bla</item>" +
                                @"<item cat=""1"" owner=""14"">bla</item><item cat=""2"" owner=""12"">bla</item>" +
                                @"<item cat=""2"" owner=""12"">bla</item></items>");

  int cat = 1;


  List<int> owners = ele.Elements("item")
    .Where(x=>x.Attribute("cat").Value==cat.ToString()).Select(x=>Convert.ToInt32(x.Attribute("owner").Value)).Distinct().ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top