我有以下XML:
<Test>
<parent>
<child>
<Qualifier>S</Qualifier>
<Number>11</Number>
</child>
<child>
<Qualifier>S</Qualifier>
<Number>12</Number>
</child>
<child>
<Qualifier>B</Qualifier>
<Number>3</Number>
</child>
</parent>
</Test>
<Test>
<parent>
<child>
<Qualifier>S</Qualifier>
<Number>15</Number>
</child>
<child>
<Qualifier>S</Qualifier>
<Number>16</Number>
</child>
<child>
<Qualifier>B</Qualifier>
<Number>3</Number>
</child>
</parent>
</Test>
我正在从我的C#代码中读取这个XML。
有一个Test
数组,里面有一个parent
数组,里面有一个child
数组。
我想获得Test
元素,其中第二 child
,限定符为 S
等于12
如何使用linQ选择项目条件限定符的第二个元素==“S”等于12?
我试过了:
var test = Test.Where(e => e.parent.First().child[1].Qualifier == "S" &&
e.parent.First().child[1].Number == referenceNumber).FirstOrDefault();
但是我想要一些更有活力的东西,因为有些情况下它不是第二个元素。所以我将在更广泛的范围内使用linQ查询。
答案 0 :(得分:0)
tests.Select(x => x.Parents.Select(y => y.Childs.Select(z => z.Qualifier == "S" & z.Number == 12).Any()).Any())
答案 1 :(得分:0)
假设您将上述内容加载到类似命名的类中:
还假设第二个有S的孩子可能实际上不是Child [1]:
var test = Tests.Where(t => t.Parents.Count == 1 && t.Parents[0].Children.Select(c => c.Qualifier == "S").Count() >= 2)
.Where(t => t.Parents[0].Children.Where(c => c.Qualifier == "S").ElementAt(1).Number == 12);
答案 2 :(得分:0)
这将为您提供父母拥有第二个S限定符子项且编号为12的所有测试的列表。
tests.Where(t =>
t.Parents.Any(p =>
p.Children.Where(c => c.Qualifier == "S")
.Skip(1)
.Select(cc => cc.Number)
.FirstOrDefault() == 12)).ToList()