C# 无法根据用法推断类型参数

C# 无法根据用法推断类型参数,c#,generics,C#,Generics,我对泛型相当陌生,所以我想知道是否有人能解释我遇到的以下问题。在ASP.NET MVC应用程序中的几乎所有控制器中,我都需要返回一个筛选列表(在用户指定某些筛选条件时填充JqGrid)。每个控制器列表方法将返回不同的IQueryable列表,因此我开始创建一个通用方法来处理这个问题 当我创建我的方法时,我在一个特定的控制器中定义了它。所有的东西都整理好了,我得到了我期望的结果。因为我想从我所有的控制器调用这个方法,我假设我可以简单地创建另一个静态类,把这个方法放在那里,然后从我所有的控制器调用这

我对泛型相当陌生,所以我想知道是否有人能解释我遇到的以下问题。在ASP.NET MVC应用程序中的几乎所有控制器中,我都需要返回一个筛选列表(在用户指定某些筛选条件时填充JqGrid)。每个控制器列表方法将返回不同的IQueryable列表,因此我开始创建一个通用方法来处理这个问题

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

方法
System.Linq.Queryable.Where(System.Linq.IQueryable,
System.Linq.Expressions.Expression)
无法从用法推断。 尝试显式指定类型参数

public静态IQueryable筛选器列表(IQueryable列表、字符串筛选器)
{
var qb=newquerybuilder();
var whereClause=qb.BuildWhereClause(过滤器);
退货清单。在何处(Where条款);
}

我尝试了
list.Where(whereClause)
list.Where(whereClause)
以及几乎所有其他组合,有人能向我解释一下我的错误所在吗。

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


编译器正试图从
list
whereClause
中推断
TSource
的类型。现在,
whereClause
应该是一个
表达式,但我怀疑它不是。将鼠标悬停在
whereClause
声明中的
var
上,以了解它实际上是什么。当返回类型不明显时,我不建议使用
var

qb.buildwhere子句返回什么?表达式?您会认为
应该在哪里工作。当您使用
Where(T)
时,您会收到什么错误消息(应该不同)?另外,
Where子句
的确切实际类型是什么?IQueryable.Where接受Queryable中定义的
表达式
,或Enumerable中定义的
Func
。您能否指出
qb.BuildWhereClause(filters)的返回类型是什么它实际上返回一个字符串,我使用的是动态Linq-但是你的回答让我走上了正确的道路,它基本上缺少了对动态Linq的引用并使用了语句。现在一切正常-再次感谢您的帮助。Jon,感谢您的回复,您可以从我的另一篇文章BuildWhere子句中看到,由于我使用的是动态Linq,所以实际上返回了一个字符串-现在一切正常。对于不明显的返回类型不使用var的好处是,我将在将来尝试更加明确。顺便说一句,我喜欢你的深度小说。
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);
}