使用公共属性的值合并IEnumerable类型的列表

时间:2015-04-05 04:41:49

标签: c# list ienumerable

我有6个IEnumerable<SalesSummaryDAO>类型列表。 SalesSummaryDAO如下所示,

  public class SalesSummaryDAO {

    public int Year {get;set;}

    public decimal? Cost {get;set;}

}

这里的列表是;

        IEnumerable<SalesSummaryDAO> FabricCost = getFabricCostDataByYear();
        IEnumerable<SalesSummaryDAO> AccessoryCost = getAccessoryCostDataByYear();
        IEnumerable<SalesSummaryDAO> FOBRevenue = getFobRevenueDataByYear();
        IEnumerable<SalesSummaryDAO> StockCost = getStockLotsCostDataByYear();
        IEnumerable<SalesSummaryDAO> StockRevenue = getStockLotsRevenueDataByYear();
        IEnumerable<SalesSummaryDAO> FixedCost = getFixedCost();

如您所见,每个列表都包含一组SalesSummaryDAO类型的对象。我需要做的是,我想用这些清单计算每年的净利润。例如,2015年的净利润计算如下:

NetProfit(2015)= FOBRevenue(2015)+ StockRevenue(2015) - FabricCost(2015) - AccessoryCost(2015) - StockCost(2015) - FixedCost(2015)

在计算每年的净利润后,我想将它们存储在另一个IEnumerable<SalesSummaryDAO>列表中,其中成本变量保持每年的净利润。

1 个答案:

答案 0 :(得分:0)

您可以使用分组:

var resultList = FabricCost.Concat(AccessoryCost)  // append together
                           .Concat(FOBRevenue)     // append together
                           .Concat(StockCost)      // append together
                           .Concat(StockRevenue)   // append together
                           .Concat(FixedCost)      // append together 
                           .GroupBy(x => x.Year)   // group by year
                           .Select(g => new SalesSummaryDAO ()
                            {
                              Year = g.Key,
                              Cost = g.Sum(x => x.Cost)
                            }) // project to SalesSummaryDAO 
                           .ToList(); // make it a real list!

这会按年份对所有列表进行分组并总结 - 只需将要减去的项目设为负成本(例如面料成本)。