我正在尝试在LINQ to XML中执行SUM和Group By。我也在使用LINQPad 4来测试我的linq。由于某种原因,rate = g.Sum(taxRate)给我一个FormatException错误。我很确定这个LINQ查询也可以被清除。我知道“Taxrate”可以是一个空字符串,我希望默认为0或忽略任何空。有什么建议吗?
var tax = from taxRate in TaxRates.Descendants("Code")
where
taxRate.Attribute("taxrate") != null
&&
Int32.Parse(taxRate.Attribute("taxyear").Value) == TaxYear
group taxRate by taxRate.Attribute("taxunitid").Value into g
select new
{
ID = g.Key,
rate = g.Sum(taxRate => Decimal.Parse(taxRate.Attribute("taxrate").Value))
};
taxRatesByTaxUnit.Dump();
以下是一些示例xml。
<Code taxyear="2005" tusfundid="12" cycleid="575" taxunitid="198674" taxrate=".214000000"/>
<Code taxyear="2005" tusfundid="13" cycleid="575" taxunitid="198674" taxrate=".004"/>
<Code taxyear="2005" tusfundid="13" cycleid="575" taxunitid="198674" taxrate=""/>
<Code taxyear="2005" tusfundid="13" cycleid="575" taxunitid="100000" taxrate=""/>
我希望能够取回
taxunit id: 198674: taxrate = .218
taxunit id: 100000: taxrate = .000
答案 0 :(得分:0)
好的,考虑到空字符串的税率应该被视为0&#34;,我可能会将其分解为单独的方法。它比尝试内联更简单。然后,我会在任何地方使用显式转换。
类似于:
private decimal GetTaxRate(XElement code)
{
XAttribute rateAttribute = code.Attribute("taxRate");
return (string) rateAttribute == "" ? 0m : (decimal) rateAttribute;
}
...
var query = from code in TaxRates.Descendants("Code")
where (int?) code.Attribute("taxyear") == TaxYear
&& code.Attribute("taxRate") != null
group code by (string) code.Attribute("taxunitid") into g
select new {
ID = g.Key,
rate = g.Sum(code => GetTaxRate(code))
};
query.Dump();