无法从使用错误中推断出方法的类型参数

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 的类型参数?

我找不到任何这样的论据;编译器也不能,因此您没有给它足够的信息来推断类型。