2015-07-21 80 views
3

我有一张发票清单,每个记录包含一个客户ID和金额。其目的是为每个客户(每个客户可能有多个发票)生成一个付款清单,并将相关发票金额总计为一个总额。如何在汇总另一个房产时汇总一个房产?

生成不同发票清单(关于客户ID)为very easy。事情是,我只有第一张发票金额的价值,而不是金额。

List<Payment> distinct = invoices 
    .GroupBy(invoice => invoice.CustomerId) 
    .Select(group => group.First()) 
    .Select(invoice => new Payment 
    { 
    CustomerId = invoice.CustomerId, 
    Total = invoice.Amount 
    }).ToList(); 

是否有一个流畅的LINQ-FU为或者我需要去的foreach我的名单上?

+7

这将是一个容易得多如果你提供了样本输入和预期的输出,以及你到目前为止已经有多远,那么可以帮助你。 –

回答

2

如果你有这样的事情

Invoice[] invoices = new Invoice[3]; 

invoices[0] = new Invoice { Id = 1, Amount = 100 }; 
invoices[1] = new Invoice { Id = 1, Amount = 150 }; 
invoices[2] = new Invoice { Id = 2, Amount = 300 }; 

为基于jmelosegui的答案

var results = from i in invoices 
       group i by i.Id into g 
       select new { Id = g.Key, TotalAmount = g.Sum(i => i.Amount)}; 
1

然后你可以有你的目标:

List<Payment> distinct = invoices 
    .GroupBy(c => c.CustomerId) 
    .Select(c => new Payment 
    { 
    CustomerId = c.Key, 
    Total = c.Sum(x => x.Amount) 
    }).ToList(); 
+0

@jmelosegui太棒了,谢谢。但我意识到这不会起作用。所述问题本身的答案是有效的。可悲的是,我得到的实体/复杂类型*付款*的实例不能在LINQ to Entities查询中构造的错误...我假设这是与原始问题无关的问题,需要单独调查。 –