아래 XML을 통해, 나는 InputItem을 기준으로 그룹화하고 모든 연도의 비용을 합산해야합니다. 그래서 결과는 다음과 같아야합니다LINQ에서 XML로 그룹화 및 합계
- 연구 계약, 7000
- 기술 계약, 5000
- 환대, 여기
2000 XML의 :
<Inputs>
<Inputs_Table_Row>
<InputItem>Research Contracts</InputItem>
<TotalYear1>1000</TotalYear1>
<TotalYear2>2000</TotalYear2>
</Inputs_Table_Row>
<Inputs_Table_Row>
<InputItem>Research Contracts</InputItem>
<TotalYear1>2000</TotalYear1>
<TotalYear2>2000</TotalYear2>
</Inputs_Table_Row>
<Inputs_Table_Row>
<InputItem>Technical Contracts</InputItem>
<TotalYear1>1000</TotalYear1>
<TotalYear2>2000</TotalYear2>
</Inputs_Table_Row>
<Inputs_Table_Row>
<InputItem>Technical Contracts</InputItem>
<TotalYear1>1000</TotalYear1>
<TotalYear2>1000</TotalYear2>
</Inputs_Table_Row>
<Inputs_Table_Row>
<InputItem>Hospitality</InputItem>
<TotalYear1>1000</TotalYear1>
<TotalYear2>1000</TotalYear2>
</Inputs_Table_Row>
</Inputs>
여기 내 시도가 단순히이다 지금까지 그룹화했지만 성공하지 못했습니다.
XDocument doc = XDocument.Load(@"c:\temp\CrpTotalsSimple.xml");
var query = from c in doc.Descendants("Inputs_Table_Row")
group new
{
Item = (string)c.Element("InputItem")
}
by c.Element("InputItem")
into groupedData
select new
{
ItemName = groupedData.Key.Value
};
foreach (var item in query)
Console.WriteLine(String.Format("Item: {0}", item.ItemName));
어떻게 해결할 수 있습니까? int
그렇지 않으면 괜찮을 것 - 당신이 분수 구성 요소가있을 수 있습니다 통화 상대하고 의심 때문에 내가 decimal
을 사용하고
var query = from yearTotalEl in doc.Descendants()
where yearTotalEl.Name.LocalName.StartsWith("TotalYear")
group (decimal)yearTotalEl
by (string)yearTotalEl.Parent.Element("InputItem") into g
select new {ItemName = g.Key, Sum = g.Sum()};
,이 기사의 도움을 받았습니다 : 를 http://blog.blocks4.net/post/2007/08/Querying-XML-documents-with-LINQ-to-XML .aspx – Graeme