private static YearlySales GetYearSales_bySalesDate(IEnumerable <Sales> sales, int lastyear, string HCOId, string productGroupId) { YearlySales sale = new YearlySales(); sale.LastYear = lastyear; sale.HCOId = HCOId; sale.ProductGroupId = productGroupId; sale.LastYearTotalCredit = 0; //Get last year's data for (int i = 1; i <= 12; i++) { DateTime month = new DateTime(lastyear, i, 1); MonthlySales monthlySales = new MonthlySales() { Month = month, MonthInt = Int32.Parse(month.ToString("yyyyMM")) }; var filteredList = from Sales s in sales where s.HCOId == HCOId //&& s.ProductGroupId == productGroupId && s.Month == monthlySales.MonthInt //用bonus_in来计算起销月 && s.ProductGroupId == productGroupId && DateTimeUtility.GetMonthInt(s.SalesDate) == monthlySales.MonthInt && //用sales date来计算起销月 s.Year == lastyear select s.Credit; double credit = filteredList.Sum(); //double credit = sales.Where(s => s.ProductGroupId == productGroupId && s.HCOId == HCOId && // s.Month == monthlySales.MonthString && s.TerritoryId == territoryId && s.Year == year). // Select(x => x.Credit).Sum(); monthlySales.Credit = credit; if (filteredList.Count() > 0) { sale.lastYearMonthlySales.Add(monthlySales); } sale.LastYearTotalCredit += credit; } int startSalesMonth = GetStartSalesMonth(sale.lastYearMonthlySales); if (startSalesMonth > 0) { sale.LastYearStartSalesMonth = lastyear.ToString() + startSalesMonth.ToString("0#"); sale.LastYearSalesMonthNumber = 12 - startSalesMonth + 1; sale.LastYearMonthlyAverageCredit = sale.LastYearTotalCredit / sale.LastYearSalesMonthNumber; sale.iLastYearStartSalesMonth = startSalesMonth; } int thisYear = lastyear + 1; //Get this year's data for (int i = 1; i <= 12; i++) { DateTime month = new DateTime(thisYear, i, 1); MonthlySales monthlySales = new MonthlySales() { Month = month, MonthInt = Int32.Parse(month.ToString("yyyyMM")) }; var filteredList = from Sales s in sales where s.HCOId == HCOId && s.ProductGroupId == productGroupId && DateTimeUtility.GetMonthInt(s.SalesDate) == monthlySales.MonthInt && s.Year == thisYear select s.Credit; double credit = filteredList.Sum(); monthlySales.Credit = credit; //double credit = sales.Where(s => s.ProductGroupId == productGroupId && s.HCOId == HCOId && // s.Month == monthlySales.MonthString && s.TerritoryId == territoryId && s.Year == year). // Select(x => x.Credit).Sum(); if (filteredList.Count() > 0) { sale.thisYearMonthlySales.Add(monthlySales); } sale.ThisYearYTDCredit += credit; } startSalesMonth = GetStartSalesMonth(sale.thisYearMonthlySales); if (startSalesMonth > 0) { sale.ThisYearStartSalesMonth = lastyear.ToString() + startSalesMonth.ToString("0#"); sale.iThisYearStartSalesMonth = startSalesMonth; } return(sale); }