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

时间:2009-10-01 15:52:05

标签: 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);
}

我已尝试list<T>.Where(whereClause)list.Where<T>(whereClause)以及几乎所有其他组合,任何人都可以向我解释我哪里出错了。

1 个答案:

答案 0 :(得分:8)

这表明您的BuildWhereClause方法未返回相应的类型。

编译器正试图从TSourcelist推断出whereClause的类型。现在whereClause 应该是Expression<Func<T, bool>>,但我怀疑它不是。将鼠标悬停在var声明中的whereClause上,了解其实际情况。当返回类型不明显时,我不建议使用var