Я работаю над методом расширения, чтобы обеспечить возможности фильтрации для нескольких объектов. Участвующие объекты имеют разные типы, но имеют общие поля, которые можно искать.Создание универсального метода расширения для обеспечения функциональности фильтрации
Ниже приведена работа, однако мне было интересно, можно ли это «обобщить», чтобы кастинг от общего к явному типу не обязательно возникал?
public static IQueryable<T> PriceLow<T>(this IQueryable<T> query, decimal? priceLow)
{
if (typeof(T) == typeof(Entity1))
{
var innerQuery = (IQueryable<Entity1>) query;
var results = priceLow.HasValue ? innerQuery.Where(o => (o.ListPrice > priceLow.Value)) : innerQuery;
return (IQueryable<T>) results;
}
if (typeof(T) == typeof(Entity2))
{
var innerQuery = (IQueryable<Entity2>)query;
var results = priceLow.HasValue ? innerQuery.Where(o => (o.ListPrice > priceLow.Value)) : innerQuery;
return (IQueryable<T>)results;
}
return null;
}
Пример использования:
var foo = _repository.GetAllEntity1().PriceLow(_searchCritera.PriceLow);
Спасибо, Пол, имел пробел в знаниях о том, как указать общий базовый класс для метода (где T: ICommonInterface) – Jesse