اختر XElements فريدة من نوعها (عن طريق سمة) مع فلتر باستخدام LinqToXml

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

  •  19-08-2019
  •  | 
  •  

سؤال

ولدي وثيقة 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. في بلدي على سبيل المثال، فإن الاستعلام عن القط 1 إرجاع قائمة تحتوي على 9 و 14. كيف يمكنني أن أفعل ذلك؟ أن جملة ينق يفضل على Lambdas. يرجع الفضل في ذلك مسبقا؛)

هل كانت مفيدة؟

المحلول

وعلى افتراض جزء في itemsElement:

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

والاعتذار عن التنسيق والمسافة البادئة!

نصائح أخرى

جرب هذه الوظيفة: -

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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top