我对仿制药很新,所以我想知道是否有人可以解释我遇到的以下问题.在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)和几乎所有其他的组合,我要去哪里错了,谁能给我解释一下.
这表明您的BuildWhereClause方法没有返回适当的类型.
编译器试图推断类型TSource从两个list和whereClause.现在whereClause 应该是一个,Expression<Func<T, bool>>但我怀疑它不是.将鼠标悬停var在声明中whereClause以查明它实际上是什么.var当返回类型不明显时,我不建议使用.