【问题标题】:Sum of list group by a field in c# [duplicate]c#中的字段列表组的总和[重复]
【发布时间】:2021-08-11 19:44:48
【问题描述】:

作为 c# 的初学者,我试图弄清楚如何在一个类中对数据列表进行分组和求和。

m_Invoice.InvoiceRow 包括“productId”和“price”字段。我想做的是找到每个productIds的总价格

private void SendData(Invoice m_Invoice)
{
    try
    {
        int MCounter = 1;
        double MTotal = 0;

        foreach (var item in m_Invoice.InvoiceRow)
        {

            //**I need sth like: {{productId: 15, totalPrice: 128}, {productId: 19, totalPrice: 90 }}
        }

    }
    catch (Exception err)
    {
        //
    }
}

【问题讨论】:

  • 你能显示发票和发票行类吗?以及一些示例输入数据(示例发票)。
  • m_Invoice.InvoiceRow.GroupBy(x => x.productId).Select(g => new { productId = g.Key, total = g.Sum(x => x.price) });
  • 不清楚你对结果做了什么。你想要某种 C# 对象吗? json?细绳? Console.WriteLine()?

标签: c# .net


【解决方案1】:

使用以下查询。 m_Invoice.InvoiceRow 分组 productId

var mTotals = m_Invoice.InvoiceRow
          .GroupBy(a => a.productId)
          .Select(a => new { productId = a.Key, totalPrice = a.Sum(c => c.Price) });

foreach (var item in mTotals)
{
   Console.WriteLine("id : " + item.productId + " total : " + item.totalPrice) 
}

【讨论】:

  • 我没有投反对票,但是给初学者一大堆代码,尤其是使用 LINQ 的代码,根本没有任何解释,这通常会损害他们的理解。
  • 我不知道,也许有人没有真正理解linq这句话的代码,认为它不正确。
  • 我用它作为: var mTotals = m_Invoice.InvoiceRow .GroupBy(a => a.productId) .Select(a => new { productId = a.Key, totalPrice = a.Sum(c => c.Price) })
  • 对于最终操作,我将使用这些参数调用另一个方法: onInvoiceCommand(productId, totalPrice, m_Invoice.InvoiceRow) ...所以我认为 m_Invoice.InvoiceRow 中的另一个循环如何获得“productId”和来自 mTotals 的“totalPrice”值?
  • 现在我意识到一开始我可以编写每个数据并到达那里:) 谢谢
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 2012-01-24
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多