【问题标题】:Problem in LINQ QueryLINQ 查询中的问题
【发布时间】:2009-11-24 21:43:28
【问题描述】:

在我的表中,我的客户 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,有三个客户 ID 记录。但我只需要一个 421 与所有客户金额的总和,金额应该显示为 (1300)

我需要显示的其他客户端 ID 值

最后我的输出应该是这样的

421     1300
426     200
427     400
429     500
436     600

如何在 LINQ 中使用 XML 实现此 LINQ 查询

【问题讨论】:

    标签: linq linq-to-xml


    【解决方案1】:

    这对我有用。您的 XML 示例也是错误的,缺少关闭 &lt;/client&gt;

    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 打败了我 :)。确认。这个答案应该给出所需的输出。
    • 为什么使用 LoadOptions.PreserveWhitespace?
    【解决方案2】:

    首先,确保您的 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();
    

    然后你可以遍历结果并做你需要做的事情

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多