我有以下XML文档:
<?xml version="1.0" encoding="utf-8" ?>
<Tax>
<TaxCategory>
<TaxCategoryType>Single</TaxCategoryType>
<TaxRates>
<Rate>
<From>0</From>
<To>8500</To>
<Multiply>0</Multiply>
<Subtract>0</Subtract>
</Rate>
<Rate>
<From>8501</From>
<To>14500</To>
<Multiply>0.15</Multiply>
<Subtract>1275</Subtract>
</Rate>
<Rate>
<From>14501</From>
<To>19500</To>
<Multiply>0.25</Multiply>
<Subtract>2725</Subtract>
</Rate>
<Rate>
<From>19501</From>
<To>60000</To>
<Multiply>0.29</Multiply>
<Subtract>3505</Subtract>
</Rate>
<Rate>
<From>60001</From>
<Multiply>0.35</Multiply>
<Subtract>7105</Subtract>
</Rate>
</TaxRates>
</TaxCategory>
<TaxCategory>
<TaxCategoryType>Married</TaxCategoryType>
<TaxRates>
<Rate>
<From>0</From>
<To>11900</To>
<Multiply>0</Multiply>
<Subtract>0</Subtract>
</Rate>
<Rate>
<From>11901</From>
<To>21200</To>
<Multiply>0.15</Multiply>
<Subtract>1785</Subtract>
</Rate>
<Rate>
<From>21201</From>
<To>28700</To>
<Multiply>0.25</Multiply>
<Subtract>3905</Subtract>
</Rate>
<Rate>
<From>28701</From>
<To>60000</To>
<Multiply>0.29</Multiply>
<Subtract>5053</Subtract>
</Rate>
<Rate>
<From>60001</From>
<Multiply>0.35</Multiply>
<Subtract>8653</Subtract>
</Rate>
</TaxRates>
</TaxCategory>
<TaxCategory>
<TaxCategoryType>Parent</TaxCategoryType>
<TaxRates>
<Rate>
<From>0</From>
<To>9800</To>
<Multiply>0</Multiply>
<Subtract>0</Subtract>
</Rate>
<Rate>
<From>9801</From>
<To>15800</To>
<Multiply>0.15</Multiply>
<Subtract>1470</Subtract>
</Rate>
<Rate>
<From>15801</From>
<To>21200</To>
<Multiply>0.25</Multiply>
<Subtract>3050</Subtract>
</Rate>
<Rate>
<From>21201</From>
<To>60000</To>
<Multiply>0.29</Multiply>
<Subtract>3898</Subtract>
</Rate>
<Rate>
<From>60001</From>
<Multiply>0.35</Multiply>
<Subtract>7498</Subtract>
</Rate>
</TaxRates>
</TaxCategory>
</Tax>
现在,我想提取税种的Multiply
和Subtract
值,类别为TaxCategoryType
类别,税率为from == 0
和to == 8500
如何使用LINQ执行此操作?
这是我到目前为止所做的:
var taxCategory = from tc in xmlDoc.Descendants("TaxCategory")
where tc.Element("TaxCategoryType").Value == "Single"
//and TaxRate.From = 0 && TaxRate.To = 8500
select tc;
由于From
和To
标记深深嵌套在TaxCategory
代码中,我应该放置什么而不是评论?
答案 0 :(得分:1)
你可以这样做:
var taxCategory = xmlDoc.Descendants("TaxCategory")
.First(tc => tc.Element("TaxCategoryType").Value == "Single")
.Descendants("Rate")
.FirstOrDefault(r => r.Element("From").Value == "0"
&& r.Element("To").Value == "8500");
<强>更新强>
这就是我使用查询语法(并且只有一个查询)的原因:
var category = (from r in xmlDoc.Descendants("TaxCategory").Descendants("Rate")
where r.Parent.Parent.Element("TaxCategoryType").Value == "Single"
&& r.Element("From").Value == "0" && r.Element("To").Value == "8500"
select r).FirstOrDefault();