//为月份比较柱形图提供数据列表 public static List <MonthlyData> DataForMonthComparison(Models.Book book, DateTimeOffset begin, DateTimeOffset end, int offset, bool receiveOrPay) { List <MonthlyData> data = new List <MonthlyData>(); //记录要显示的几个月份 for (int i = 0; i < offset; i++) { data.Add(new MonthlyData { Value = 0, Month = begin.Year.ToString("0000") + begin.Month.ToString("00") }); begin = begin.AddMonths(1); } begin = begin.AddMonths(-offset); //记录月份对应的总收入/支出 foreach (var ac in book.accounts) { //去掉不在当前所选时间范围,或有不同收支类型的记录 if (ac.time.CompareTo(begin.DateTime) < 0 || ac.time.CompareTo(end.DateTime) >= 0 || ac.receiptOrPay != receiveOrPay) { continue; } string acMonth = ac.time.Year.ToString("0000") + ac.time.Month.ToString("00"); data.Find(d => (d.Month.Equals(acMonth))).Value += ac.money; } foreach (var d in data) { d.Month = d.Month.Substring(d.Month.Length - 2) + "月"; } return(data); }
//为收支类型比较饼形图提供数据列表 public static List <Data> DataForTypeComparison(Models.Book book, DateTimeOffset begin, DateTimeOffset end, bool receiveOrPay) { List <Data> data = new List <Data>(); foreach (var ac in book.accounts) { if (ac.time.CompareTo(begin.DateTime) < 0 || ac.time.CompareTo(end.DateTime) >= 0 || ac.receiptOrPay != receiveOrPay) { continue; } //Lambda表达式,表示Predicate<Data>委托 if (!data.Exists(d => (d.Category == ac.type))) { data.Add(new Data { Value = ac.money, Category = ac.type }); } else { data.Find(d => (d.Category == ac.type)).Value += ac.money; } } //排序,以便饼形图上不同大小的扇形可以有顺序地沿时针方向排列 data.Sort(delegate(Data x, Data y) { return(y.Value.CompareTo(x.Value)); }); foreach (var d in data) { d.Category = d.Category + " " + d.Value.ToString() + "元"; } return(data); }
} //每个月的支出记录 public TwoDatas(Models.Book book, DateTimeOffset begin, DateTimeOffset end, int offset) { Receive = DataForMonthComparison(book, begin, end, offset, false); Pay = DataForMonthComparison(book, begin, end, offset, true); }