C# 无法根据用法推断类型参数
我对泛型相当陌生,所以我想知道是否有人能解释我遇到的以下问题。在ASP.NET MVC应用程序中的几乎所有控制器中,我都需要返回一个筛选列表(在用户指定某些筛选条件时填充JqGrid)。每个控制器列表方法将返回不同的IQueryable列表,因此我开始创建一个通用方法来处理这个问题 当我创建我的方法时,我在一个特定的控制器中定义了它。所有的东西都整理好了,我得到了我期望的结果。因为我想从我所有的控制器调用这个方法,我假设我可以简单地创建另一个静态类,把这个方法放在那里,然后从我所有的控制器调用这个方法。但是,如果我尝试将该方法移动到调用它的控制器以外的任何其他位置,编译器会抱怨该方法的最后一行出现以下错误: 方法C# 无法根据用法推断类型参数,c#,generics,C#,Generics,我对泛型相当陌生,所以我想知道是否有人能解释我遇到的以下问题。在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);
}