我正在研究一种扩展方法来为多个实体提供过滤功能。涉及的实体类型不同,但具有可以搜索的共同字段。创建通用扩展方法来提供过滤功能
下面是目前的工作,但我想知道这是否可以“泛化”,以便从泛型到显式类型的转换不需要发生?
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 2012-02-13 16:34:56