Ich habe den folgenden Code, Nur Unterschied ist, wie es Daten gruppiert, gibt es eine Möglichkeit, dies in eine Logik durch die Übergabe von Gruppe durch Argumente, So kann der doppelte Code entfernt werden.Wie schreibe ich generische Gruppe von
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();
}
}