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

Merging lists of IEnumerable type using a common attribute's value

我有 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 年的净利润计算如下:

净利润 (2015) = FOBRevenue(2015) + StockRevenue(2015) - FabricCost(2015) - AccessoryCost(2015) - StockCost(2015) - FixedCost(2015)

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

您可以使用分组:

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!

这会按年份对您的所有列表进行分组并将它们相加 - 只需让您要减去的项目具有负成本(例如面料成本)。