【问题标题】:merge collection using linq使用 linq 合并集合
【发布时间】:2013-05-29 10:10:06
【问题描述】:

我有一组具有重复值的对象。假设对象是:

public InvoiceCompany
{
    public decimal InvoiceValue { get; set; }
    public string Company { get; set; }
}

并且我在列表集合中为每个公司提供了多张发票。如何合并集合中的对象、不同的公司并同时添加它们的 InvoiceValues?我想用 Linq 来做!

【问题讨论】:

  • 您想要的最终输出是什么?匿名类型?它将包含哪些属性?
  • 你有什么尝试吗?如果是这样,请发布代码以及它有什么问题。如果没有:为什么不呢?
  • 你能给我们一个输入和预期输出的例子吗?
  • 我有:(15.5-A、4.5-A、15.5-B、4.5-B)。想得到(20-A,20-B)。还没开始写代码,不知道怎么写

标签: c# linq collections


【解决方案1】:

使用GroupBy:

var list = new List<InvoiceCompany>(); //your collection of invoices
var grouped = list.GroupBy(x => x.Company)
                  .Select(g => new InvoiceCompany { Company = g.Key, InvoiceValue = g.Sum(x => x.InvoiceValue) });

【讨论】:

  • 我认为Select 应该是这样的:Select(g = new InvoiceCompany { Company = g.Key, InvoiceValue = g.Sum(x =&gt; x.InvoiceValue) })。原因:OP 声明:“同时添加他们的 InvoiceValues”
【解决方案2】:

您可以使用 group by 语句。

List<InvoiceCompany> li = new List<InvoiceCompany>(){
     new InvoiceCompany { Company = "a", InvoiceValue = 1 },
     new InvoiceCompany { Company = "a", InvoiceValue = 2 },
     new InvoiceCompany { Company = "b", InvoiceValue = 1 },
     new InvoiceCompany { Company = "b", InvoiceValue = 2 }
};

var v = from a in li
        group a.InvoiceValue by a.Company into b
        select new { Company = b.Key, Invoices = b.ToList().Sum() };

【讨论】:

    【解决方案3】:

    尝试按公司对您的 InvoiceValue 进行分组并计算总和:

    var v =
    from l in list
    group l.InvoiceValue by l.Company
    into g
    select new InvoiceCompany()
    {
        Company = g.Key,
        InvoiceValue = g.Sum()
    };
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 2011-06-29
      • 2010-09-07
      相关资源
      最近更新 更多