我使用LINQ TO XML查询XML.我想基于一些条件检查查询记录这里是我的XML下面:XML将有多个订单,每个订单将在我想要选择的顺序,其中param节点属性存储值不为null,如果存在应该是1并且还订购纸箱信息......
<orders>
<order>
<criteria>
<param name="location">123</param>
<param name="name">Chicago</param>
<param name="Store">1</param>
<param name="Account Number">1212121212</param>
</criteria>
<items>
<item> </item>
<item> </item>
</items>
<cartons>
<carton>
<size> </size>
<weight></weight>
</carton>
</cartons>
</order>
<Order>
</Order>
</orders>
Run Code Online (Sandbox Code Playgroud)
我能做到这一点:
var result = from item in doc.Descendants("order")
where item.Element("criteria").Element("param").Attribute("name").Value.Contains("store") == true
&& item.Element("cartons") != null
select item;"
Run Code Online (Sandbox Code Playgroud)
如果我的store(param)属性在过滤器节点中是第一个但是如果我将商店(param)移动到其他位置而不是首先它不过滤它,则上面工作正常
问题是你只看一个 param元素 - 总是第一个元素,因为这就是它的Element作用.
如果任何参数是值为1的"Store"元素,您希望匹配,因此您希望使用该Any方法并使用它Elements来查找所有参数:
var query = from item in doc.Descendants("order")
where item.Element("criteria").Elements("param")
.Any(p => p.Attribute("name").Value == "Store" &&
(int) p == 1)
&& item.Element("cartons") != null
select item;
Run Code Online (Sandbox Code Playgroud)
查询表达式并没有真正帮助你 - 我使用:
var query = doc.Descendants("order")
.Where(item => item.Element("criteria").Elements("param")
.Any(p => p.Attribute("name").Value == "Store" &&
(int) p == 1)
&& item.Element("cartons") != null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |