我有这样的事情:
public List<T> GetPageRows<T>(Expression<Func<T, bool>> predicate, List<ColumnSortOrder> sortOrder, int pageSize, int pageNo) where T : Type1, Type2, Type3
{
var filteredQueryable = GetRowsAndFilter(predicate);
var orderedQueryable = GetOrderedQueryable(sortOrder, filteredQueryable);
var pagedQueryable = orderedQueryable.Skip((pageNo - 1) * pageSize).Take(pageSize);
return pagedQueryable.ToList();
}
private IQueryable<Type1> GetRowsAndFilter(Expression<Func<Type1, bool>> predicate)
{
return GetType1s(predicate);
}
private IQueryable<Type2> GetRowsAndFilter(Expression<Func<Type2, bool>> predicate)
{
return GetType2s(predicate);
}
private IQueryable<Type3> GetRowsAndFilter(Expression<Func<Type3, bool>> predicate)
{
return GetType3s(predicate);
}
我希望通过制作 GetRowsAndFilter() 的非泛型类特定版本,然后将 GetPageRows() 的泛型类型参数限制为这三个类之一,编译器能够弄清楚要做什么。
不过where T : Type1, Type2, Type3
好像是违法的。
我该如何解决这个问题?
这个想法是 GetPageRows() 中的算法是通用的,不依赖于我得到的特定类型的行。只有返回类型和谓词取决于 T。
编辑:我尝试限制它们的基本类型以及常见的空界面,但我仍然在var filteredQueryable = GetRowsAndFilter(predicate);
. “无法解决方法”。它不知道如何选择这些方法的正确版本。我不知道该怎么办。应该可以将 GetPageRows() 中的通用算法与实际类型 T 以及不同版本的 GetRowsAndFilter() 中的每个 T 的特定不同查询分开。