我有以下两种方法。我想将这两种方法合而为一。
当我喜欢下面两种方法完美工作时
public static async Task<GridResult<List<T>>> GetGridResult<T, TSearchFilter>(
this IQueryable<T> query,
QueryFilter<TSearchFilter> queryFilter) where TSearchFilter : class
{
}
public static async Task<GridResult<List<T>>> GetGridResult<T>(
this IQueryable<T> query,
QueryFilter queryFilter)
{
}
因此,我通过将null
的默认QueryFilter<TSearchFilter> queryFilter
值赋给public static async Task<GridResult<List<T>>> GetGridResult<T, TSearchFilter>(
this IQueryable<T> query,
QueryFilter<TSearchFilter> queryFilter = null) where TSearchFilter : class
{
}
来将自己的方法归为一种方法。
但是,当我执行一种方法时,却给了我错误
query.GetGridResult(queryFilter)
但是我不能通过public class QueryFilter<TSearchFilter> where TSearchFilter: class
{
public QueryFilter()
{
SearchFilter = (TSearchFilter)Activator.CreateInstance(typeof(TSearchFilter));
}
public string SortBy { get; set; }
public bool IsSortAscending { get; set; }
public int PageFirstIndex { get; set; }
public byte PageSize { get; set; }
public TSearchFilter SearchFilter { get; set; }
}
public class QueryFilter
{
public string SortBy { get; set; }
public bool IsSortAscending { get; set; }
public int PageFirstIndex { get; set; }
public byte PageSize { get; set; }
}
这样的参数来调用我的方法。它给我错误
'IQueryableExtensions.GetGridResult(IQueryable,QueryFilter)'不能从用法中推断出来。尝试显式指定类型参数。
如何解决此错误?
?renderTable
答案 0 :(得分:2)
由于null
没有类型,因此无法确定TSearchFilter
的类型。您可以通过指定类型来调用该方法,例如query.GetGridResult<string, object>(queryFilter)
,因此即使您可能不使用对象null
,它在您的上下文中仍然有效。
老实说,我只能将其保留为2种单独的方法,而调用另一个则更为详细。
答案 1 :(得分:1)
因为您要尝试使用非通用类QueryFilter<TSearchFilter> queryFilter
的值调用具有通用参数QueryFilter
的方法,所以该方法与通用类无关。
编辑:如果您希望使用一种方法,那么QueryFilter
必须从QueryFilter<TSearchFilter>
派生。
答案 2 :(得分:1)
我是在@MariePichova的答案的帮助下找到答案的。我如下更改了QueryFilter类。然后一切正常。
public class QueryFilter<TSearchFilter> where TSearchFilter : class
{
public QueryFilter()
{
SearchFilter = (TSearchFilter)Activator.CreateInstance(typeof(TSearchFilter));
}
public string SortBy { get; set; }
public bool IsSortAscending { get; set; }
public int PageFirstIndex { get; set; }
public byte PageSize { get; set; }
public TSearchFilter SearchFilter { get; set; }
}
public class QueryFilter : QueryFilter<EmptySearchFilter>
{ }
public class EmptySearchFilter
{ }