У меня есть следующие методы расширения:
public static class QueryableOptionalDateRangeExtensions
{
public static IQueryable<T> StartsFrom<T>(this IQueryable<T> query, DateTime date)
where T : IOptionalDateRange // Might also be IRequiredDateRange
{
return query.Where(obj => obj.Start >= date);
}
public static IQueryable<T> StartsUntil<T>(this IQueryable<T> query, DateTime date)
where T : IOptionalDateRange // Might also be IRequiredDateRange
{
return query.Where(obj => obj.Start < date);
}
public static IQueryable<T> EndsUntil<T>(this IQueryable<T> query, DateTime date)
where T : IOptionalDateRange
{
return query.Where(obj => obj.End <= date);
}
}
public static class QueryableRequiredDateRangeExtensions
{
public static IQueryable<T> StartsFrom<T>(this IQueryable<T> query, DateTime date)
where T : IRequiredDateRange
{
return query.Where(obj => obj.Start >= date);
}
public static IQueryable<T> StartsUntil<T>(this IQueryable<T> query, DateTime date)
where T : IRequiredDateRange
{
return query.Where(obj => obj.Start < date);
}
public static IQueryable<T> EndsUntil<T>(this IQueryable<T> query, DateTime date)
where T : IRequiredDateRange
{
return query.Where(obj => obj.End <= date);
}
}
Это, однако, не работает, поскольку по какой-то причине не может вывести перегрузку из типа T (хотя мне это кажется возможным).
Что можно сделать, чтобы обойти эту проблему?
РЕДАКТИРОВАТЬ:
Вот интерфейс IDateRange:
public interface IDateRange<TStart, TEnd>
{
TStart Start { get; set; }
TEnd End { get; set; }
}
Он просто указывает, что у класса есть начало и конец.Теперь я хочу, чтобы он указывал, имеет ли объект необязательный диапазон дат (и начало, и конец, могут быть обнуляемыми) или требуемый диапазон дат (оба являются типами значений), но один и тот же метод расширения должен работать на обоих, и я действительно не хочуукажите типы свойств Start и End.