Since Entity Set does not support asqueryable, I have to do this. How can I reduce the amount of redundant code between the two methods?
public static IQueryable<T> WhereCreateWithin<T>(this IQueryable<T> query, DateManager.TimeRange timeRange, DateTime? beginDayParam = null) where T : IHasCreateDate
{
if (beginDayParam == null)
{
beginDayParam = DateTime.Today;
}
DateTime beginDay = beginDayParam.Value.Date;
DateTime startRange;
DateTime endRange;
switch (timeRange)
{
case DateManager.TimeRange.All:
return query;
case DateManager.TimeRange.ThisYear:
startRange = new DateTime(beginDay.Year, 1, 1); // January 1, this year
endRange = startRange.AddYears(1);
return query.Where(p => p.create_date.Date >= startRange && p.create_date < endRange);
case DateManager.TimeRange.ThisMonth:
startRange = new DateTime(beginDay.Year, beginDay.Month, 1);
endRange = startRange.AddMonths(1).Date;
return query.Where(p => p.create_date.Date >= startRange && p.create_date < endRange);
case DateManager.TimeRange.ThisWeek:
startRange = BuilkHelper.DateHelper.StartOfWeek(beginDay, DayOfWeek.Monday);
endRange = startRange.AddDays(6);
return query.Where(p => p.create_date.Date >= startRange && p.create_date < endRange);
case DateManager.TimeRange.ToDay:
return query.Where(p => p.create_date.Date == beginDay);
case DateManager.TimeRange.Last30Day:
startRange = beginDay.AddDays(-29);
endRange = beginDay;
return query.Where(p => p.create_date.Date >= startRange && p.create_date <= endRange);
}
return query;
}
public static IEnumerable<T> WhereCreateWithin<T>(this IEnumerable<T> query, DateManager.TimeRange timeRange, DateTime? beginDayParam = null) where T : IHasCreateDate
{
if (beginDayParam == null)
{
beginDayParam = DateTime.Today;
}
DateTime beginDay = beginDayParam.Value.Date;
DateTime startRange;
DateTime endRange;
switch (timeRange)
{
case DateManager.TimeRange.All:
return query;
case DateManager.TimeRange.ThisYear:
startRange = new DateTime(beginDay.Year, 1, 1); // January 1, this year
endRange = startRange.AddYears(1);
return query.Where(p => p.create_date.Date >= startRange && p.create_date < endRange);
case DateManager.TimeRange.ThisMonth:
startRange = new DateTime(beginDay.Year, beginDay.Month, 1);
endRange = startRange.AddMonths(1).Date;
return query.Where(p => p.create_date.Date >= startRange && p.create_date < endRange);
case DateManager.TimeRange.ThisWeek:
startRange = BuilkHelper.DateHelper.StartOfWeek(beginDay, DayOfWeek.Monday);
endRange = startRange.AddDays(6);
return query.Where(p => p.create_date.Date >= startRange && p.create_date < endRange);
case DateManager.TimeRange.ToDay:
return query.Where(p => p.create_date.Date == beginDay);
case DateManager.TimeRange.Last30Day:
startRange = beginDay.AddDays(-29);
endRange = beginDay;
return query.Where(p => p.create_date.Date >= startRange && p.create_date <= endRange);
}
return query;
}