我对仿制药相当新,所以我想知道是否有人可以解释我遇到的以下问题。在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);
}
我已尝试list<T>.Where(whereClause)
和list.Where<T>(whereClause)
以及几乎所有其他组合,任何人都可以向我解释我哪里出错了。
答案 0 :(得分:8)
这表明您的BuildWhereClause
方法未返回相应的类型。
编译器正试图从TSource
和list
推断出whereClause
的类型。现在whereClause
应该是Expression<Func<T, bool>>
,但我怀疑它不是。将鼠标悬停在var
声明中的whereClause
上,了解其实际情况。当返回类型不明显时,我不建议使用var
。