【问题标题】:The type arguments for method... cannot be inferred from the usage方法的类型参数...不能从用法中推断出来
【发布时间】:2016-07-17 21:04:18
【问题描述】:

代码如下:

private IQueryable<TSearchResultItem> Search(bool flag)
{
    var index = ContentSearchManager.GetIndex(Index);
    var ctx = index.CreateSearchContext(SearchSecurityOptions.EnableSecurityCheck);
    var items = ctx.GetQueryable<TSearchResultItem>();

    var search = HttpContext.Current.Request[SearchTxtParameter];
    if (!string.IsNullOrEmpty(search))
    {
        var predicate = PredicateBuilder.True<LookbookSearchResultItem>();
        predicate = predicate.And(x => x.Contributors != null);
        return items.Filter(predicate);
    }
    return items;
}

问题出在这一行:

return items.Filter(predicate);

错误:

Error   CS0411  The type arguments for method 'QueryableExtensions.Filter<TSource>(IQueryable<TSource>, Expression<Func<TSource, bool>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

如何克服?

【问题讨论】:

  • 有什么问题?
  • 对不起。我已经用错误消息更新了帖子。
  • TSearchResultItem 和 LookbookSearchResultItem 是什么关系?
  • 公开课 LookbookSearchResultItem : SearchResultItem
  • TSearchResultItem 是泛型类型参数吗?这不会进行类型检查,因为LookbookSearchResultItem 不是TSearchResultItem。如果您手动将 type 参数应用于对 Filter 的调用,您应该会收到另一个错误来解释问题。

标签: c#


【解决方案1】:

您的问题是您传递给Filter 扩展方法的谓词需要一个TSource(即LookbookSearchResultItem),它与@987654326 预期的TSource(即TSearchResultItem)不同@方法。

由于您没有为 Filter 方法明确指定所需的类型,因此编译器会混淆要考虑 TSearchResultItemLookbookSearchResultItem 的类型,这就是您收到此错误的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多