LINQ查询中的问题

时间:2009-11-24 07:51:59

标签: linq linq-to-xml

在我的表中,我的客户端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查询

2 个答案:

答案 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();

然后,您可以通过结果预测并执行您需要做的事情