7

次のような XML ドキュメントがあります。

<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>

ここで、linq クエリを使用して、指定されたカテゴリに属する​​すべての一意の所有者 (実際には所有者の属性値のみが必要です) を取得したいと考えています。私の例では、cat 1 のクエリは 9 と 14 を含むリストを返します。Linq 構文はラムダよりも優先されます。前もって感謝します ;)

4

3 に答える 3

15

フラグメントが itemsElement にあると仮定します。

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

書式設定とインデントについてお詫びします。

于 2008-12-05T20:56:22.823 に答える
2

この機能を試してください:-

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();

}
于 2008-12-05T20:58:54.860 に答える
0
  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();
于 2008-12-05T21:00:11.533 に答える