0
私は以下のコードを持っています。違いはデータをグループ化する方法です。引数でグループを渡すことでこれを1つのロジックにする方法はありますか?一般的なグループを書く方法
public interface IStackChartData
{
IReadOnlyCollection<StackChartData> GetDetails(StackChartSetting chartSetting);
}
public class DailyStack : IStackChartData
{
public IReadOnlyCollection<StackChartData> GetDetails(StackChartSetting chartSetting)
{
return chartSetting.StackChartDataPoints.GroupBy(x => new { x.DataTime.Hour, x.RateId })
.OrderBy(x => x.Key.RateId).Select(cl => new StackChartData(
cl.Key.RateId,
cl.Key.Hour.ToString(CultureInfo.CurrentCulture),
cl.Sum(c => Convert.ToDecimal(c.YData)),
chartSetting.GetColorCode(cl.Key.RateId))).ToList();
}
}
public class MonthlyStack : IStackChartData
{
public IReadOnlyCollection<StackChartData> GetDetails(StackChartSetting chartSetting)
{
return chartSetting.StackChartDataPoints.GroupBy(x => new { x.DataTime.Date, x.RateId })
.OrderBy(x => x.Key.RateId).Select(cl => new StackChartData(
cl.Key.RateId,
cl.Key.Date.Day.ToString(CultureInfo.CurrentCulture),
cl.Sum(c => Convert.ToDecimal(c.YData)),
chartSetting.GetColorCode(cl.Key.RateId))).ToList();
}
}
public class YearlyStack : IStackChartData
{
public IReadOnlyCollection<StackChartData> GetDetails(StackChartSetting chartSetting)
{
return chartSetting.StackChartDataPoints.GroupBy(x => new { x.DataTime.Month, x.RateId })
.OrderBy(x => x.Key.RateId).Select(cl => new StackChartData(
cl.Key.RateId,
cl.Key.Month.ToString(CultureInfo.CurrentCulture),
cl.Sum(c => Convert.ToDecimal(c.YData)),
chartSetting.GetColorCode(cl.Key.RateId))).ToList();
}
}