无法从使用错误中推断出方法的类型参数
The type arguments for method cannot be inferred from usage error
我有一个通用的分页方法,我正在尝试调用它。
但是我收到编译时错误:
无法从用法中推断出方法的类型参数
方法:
public static IQueryable<T> OrderedPagedResults<T, TResult, TType>(IQueryable<T> query, int pageNum, int pageSize,
Expression<Func<T, TResult>> orderByProperty, bool isAscendingOrder, out int rowsCount,
List<KeyValuePair<Expression<Func<T, TType>>, bool>> lstThenByConditions = null)
{
if (pageSize <= 0) pageSize = 20;
rowsCount = query.Count();
if (rowsCount <= pageSize || pageNum <= 0) pageNum = 1;
var excludedRows = (pageNum - 1) * pageSize;
query = isAscendingOrder ? query.OrderBy(orderByProperty) : query.OrderByDescending(orderByProperty);
if (lstThenByConditions != null && lstThenByConditions.Any())
{
foreach (var thenByProperty in lstThenByConditions)
{
if (!thenByProperty.Equals(default(KeyValuePair<Expression<Func<T, TType>>, bool>))
&& (typeof(IOrderedQueryable<T>).IsAssignableFrom(query.Expression.Type)))
{
query = thenByProperty.Value
? (query as IOrderedQueryable<T>).ThenBy(orderByProperty)
: (query as IOrderedQueryable<T>).ThenByDescending(orderByProperty);
}
}
}
return query.Skip(excludedRows).Take(pageSize);
}
我正在尝试将其调用为:
var resultset = OrderedPagedResults(employees, pageNum, rowNum,
o => o.JoiningDate, isSortAscending, out totalRows);
其中员工 = IQueryable
由于某种原因,我收到此编译时错误并且无法调用它。
有什么我在这里遗漏的建议吗?
编译器虽然相当聪明,但并不总是能够推断泛型类型,例如此处的情况,因为存在多种泛型类型。它怎么知道它们应该是什么?你需要更明确:
var resultset = OrderedPagedResults<IEnumerable<Employee>, int, int>
(employees, pageNum, rowNum, o => o.JoiningDate, isSortAscending, out totalRows);
(我在猜测那里的类型)
Eric Lippert 在某个地方对此有很好的解释,但我不记得它在哪里。
Stuart Grassie 的回答是正确的,但省略了解释错误原因的细节。 在您的示例中,编译器应该从哪个参数推断出您打算用于类型参数 TType
的类型参数?
我找不到任何这样的论据;编译器也不能,因此您没有给它足够的信息来推断类型。
我有一个通用的分页方法,我正在尝试调用它。 但是我收到编译时错误: 无法从用法中推断出方法的类型参数
方法:
public static IQueryable<T> OrderedPagedResults<T, TResult, TType>(IQueryable<T> query, int pageNum, int pageSize,
Expression<Func<T, TResult>> orderByProperty, bool isAscendingOrder, out int rowsCount,
List<KeyValuePair<Expression<Func<T, TType>>, bool>> lstThenByConditions = null)
{
if (pageSize <= 0) pageSize = 20;
rowsCount = query.Count();
if (rowsCount <= pageSize || pageNum <= 0) pageNum = 1;
var excludedRows = (pageNum - 1) * pageSize;
query = isAscendingOrder ? query.OrderBy(orderByProperty) : query.OrderByDescending(orderByProperty);
if (lstThenByConditions != null && lstThenByConditions.Any())
{
foreach (var thenByProperty in lstThenByConditions)
{
if (!thenByProperty.Equals(default(KeyValuePair<Expression<Func<T, TType>>, bool>))
&& (typeof(IOrderedQueryable<T>).IsAssignableFrom(query.Expression.Type)))
{
query = thenByProperty.Value
? (query as IOrderedQueryable<T>).ThenBy(orderByProperty)
: (query as IOrderedQueryable<T>).ThenByDescending(orderByProperty);
}
}
}
return query.Skip(excludedRows).Take(pageSize);
}
我正在尝试将其调用为:
var resultset = OrderedPagedResults(employees, pageNum, rowNum,
o => o.JoiningDate, isSortAscending, out totalRows);
其中员工 = IQueryable 由于某种原因,我收到此编译时错误并且无法调用它。
有什么我在这里遗漏的建议吗?
编译器虽然相当聪明,但并不总是能够推断泛型类型,例如此处的情况,因为存在多种泛型类型。它怎么知道它们应该是什么?你需要更明确:
var resultset = OrderedPagedResults<IEnumerable<Employee>, int, int>
(employees, pageNum, rowNum, o => o.JoiningDate, isSortAscending, out totalRows);
(我在猜测那里的类型)
Eric Lippert 在某个地方对此有很好的解释,但我不记得它在哪里。
Stuart Grassie 的回答是正确的,但省略了解释错误原因的细节。 在您的示例中,编译器应该从哪个参数推断出您打算用于类型参数 TType
的类型参数?
我找不到任何这样的论据;编译器也不能,因此您没有给它足够的信息来推断类型。