2013-05-29 137 views
1

我有一个具有重复值的对象的集合。可以说,对象是:使用linq合并集合

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

并且我有List集合中每个公司的多个发票。如何合并集合中的对象,不同公司并同时添加他们的InvoiceValues?我想用Linq来做!

+1

什么是你想要的最终输出?匿名类型?它将包含哪些属性? – haim770

+1

你有什么尝试吗?如果是这样,请发布代码和它有什么问题。如果不是:为什么不呢? –

+0

您能给我们一个输入和预期输出的例子吗? –

回答

6

使用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) }); 
+0

我认为'Select'应该看起来像这样:'Select(g = new InvoiceCompany {Company = g.Key,InvoiceValue = g.Sum(x => x .InvoiceValue)})'。原因:该操作说明:*“同时添加他们的发票价值”* –

+0

你是对的,谢谢:)。现在编辑。 – gzaxx

2

您可以通过语句中使用的一组。

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() }; 
0

由公司尝试组的InvoiceValue并计算总和:

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