我有一个具有重复值的对象的集合。可以说,对象是:使用linq合并集合
public InvoiceCompany
{
public decimal InvoiceValue { get; set; }
public string Company { get; set; }
}
并且我有List集合中每个公司的多个发票。如何合并集合中的对象,不同公司并同时添加他们的InvoiceValues?我想用Linq来做!
我有一个具有重复值的对象的集合。可以说,对象是:使用linq合并集合
public InvoiceCompany
{
public decimal InvoiceValue { get; set; }
public string Company { get; set; }
}
并且我有List集合中每个公司的多个发票。如何合并集合中的对象,不同公司并同时添加他们的InvoiceValues?我想用Linq来做!
使用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 => x .InvoiceValue)})'。原因:该操作说明:*“同时添加他们的发票价值”* –
你是对的,谢谢:)。现在编辑。 – gzaxx
您可以通过语句中使用的一组。
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() };
由公司尝试组的InvoiceValue并计算总和:
var v =
from l in list
group l.InvoiceValue by l.Company
into g
select new InvoiceCompany()
{
Company = g.Key,
InvoiceValue = g.Sum()
};
什么是你想要的最终输出?匿名类型?它将包含哪些属性? – haim770
你有什么尝试吗?如果是这样,请发布代码和它有什么问题。如果不是:为什么不呢? –
您能给我们一个输入和预期输出的例子吗? –