اختر XElements فريدة من نوعها (عن طريق سمة) مع فلتر باستخدام LinqToXml
-
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();
لا تنتمي إلى StackOverflow