无法从使用中推断出类型参数

Sim*_*max 3 c# generics

我对仿制药很新,所以我想知道是否有人可以解释我遇到的以下问题.在ASP.NET MVC应用程序中的几乎所有控制器中,我都需要返回一个已过滤的列表(在用户指定某些过滤条件的情况下填充JqGrid).每个控制器列表方法将返回一个不同的IQueryable列表,所以我开始创建一个通用方法来处理它.

当我创建我的方法时,我在特定的控制器中定义它.一切都编译好了,我得到了我期望的结果.因为我想从我的所有控制器调用这个方法,我假设我可以简单地创建另一个静态类,将方法放在那里,然后从我的所有控制器调用该方法.但是,如果我尝试将方法移动到调用它的控制器以外的任何其他位置,编译器会抱怨该方法的最后一行,并出现以下错误:

System.Linq.Queryable.Where<TSource>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,bool>>) 无法从用法中推断出方法的类型参数.尝试显式指定类型参数.

public static IQueryable<T> FilteredList<T>(IQueryable<T> list, string filters)
{
     var qb = new QueryBuilder<T>();
     var whereClause = qb.BuildWhereClause(filters);
     return list.Where(whereClause);
}
Run Code Online (Sandbox Code Playgroud)

我试着list<T>.Where(whereClause)list.Where<T>(whereClause)和几乎所有其他的组合,我要去哪里错了,谁能给我解释一下.

Jon*_*eet 8

这表明您的BuildWhereClause方法没有返回适当的类型.

编译器试图推断类型TSource从两个listwhereClause.现在whereClause 应该是一个,Expression<Func<T, bool>>但我怀疑它不是.将鼠标悬停var在声明中whereClause以查明它实际上是什么.var当返回类型不明显时,我不建议使用.