在我的表中,我的客户端ID为
实际输入: -
<client>
<ClientId>421</ClientId>
<Amount>100</Amount>
<client>
<client>
<ClientId>426</ClientId>
<Amount>200</Amount>
<client>
<client>
<ClientId>421</ClientId>
<Amount>300</Amount>
<client>
<client>
<ClientId>427</ClientId>
<Amount>400</Amount>
<client>
<client>
<ClientId>429</ClientId>
<Amount>500</Amount>
<client>
<client>
<ClientId>436</ClientId>
<Amount>600</Amount>
<client>
<client>
<ClientId>421</ClientId>
<Amount>900</Amount>
<client>
我需要使用LINQ查询。
我需要将唯一客户ID的金额字段相加并将其显示为单个记录(例如:对于421,有三个clientids记录。但我只需要一个421,其中包含所有客户金额和金额的总和显示为(1300)
我需要使用此
显示的其他客户端ID值最后我的输出应该是这样的
421 1300
426 200
427 400
429 500
436 600
如何在LINQ中使用XML实现此LINQ查询
答案 0 :(得分:4)
这对我有用。您的XML示例也是错误的,错过了关闭</client>
var result =
from c in document.Elements("client")
group c by c.Element("ClientId").Value into grouped
select new
{
ClientId = grouped.Key,
TotalSum = grouped.Sum(g => Decimal.Parse(g.Element("Amount").Value))
};
foreach (var group in result)
Console.WriteLine(group.ClientId + ": " + group.TotalSum);
编辑:我加载了XDocument,如下例所示:
var document = XElement.Parse(
@"
<clients>
<client>
<ClientId>421</ClientId>
<Amount>100</Amount>
</client>
<client>
<ClientId>426</ClientId>
<Amount>200</Amount>
</client>
<client>
<ClientId>421</ClientId>
<Amount>300</Amount>
</client>
<client>
<ClientId>427</ClientId>
<Amount>400</Amount>
</client>
<client>
<ClientId>429</ClientId>
<Amount>500</Amount>
</client>
<client>
<ClientId>436</ClientId>
<Amount>600</Amount>
</client>
<client>
<ClientId>421</ClientId>
<Amount>900</Amount>
</client>
</clients>", LoadOptions.PreserveWhitespace);
答案 1 :(得分:0)
首先,确保您的xml正确无误。你的结束标签缺少/,你也需要一个根元素。
XElement Results = XElement.Load(xmlfilepath);
XNamespace NameSpace = Results.Name.Namespace;
var xe = (from c in Results.Elements(NameSpace + "client")
group c by c.Element(NameSpace + "ClientId").Value into g
select new { clientid = g.Key, AmountTotal = g.Sum(h=>decimal.Parse(h.Element(NameSpace+"Amount").Value)) }).ToList();
然后,您可以通过结果预测并执行您需要做的事情