接线员'??'不能应用于IQueryContainer和lambda表达式类型的操作数

时间:2015-06-15 04:34:36

标签: c# elasticsearch nest

我正在尝试创建一个处理某个查询的方法。我按照Nest repository上发布的示例(第60行),但编译器无法识别MatchAll,如果我尝试构建解决方案,则显示的错误是:

  

运营商'??'不能应用于IQueryContainer和lambda表达式

类型的操作数

到目前为止,这是我的方法:

public void ProcessQuery(IQueryContainer query = null)
{

   var searchResult = this._client.Search<T>(
                s => s
                    .Index(MyIndex)
                    .AllTypes()
                    .From(0)
                    .Take(10)
                    .Query(query ?? (q => q.MatchAll())) // Not valid
                    .SearchType(SearchType.Scan)
                    .Scroll("2m")
                );
}

2 个答案:

答案 0 :(得分:1)

lambda表达式的类型可以转换为Expression或某种委托类型,但很可能不会转换为IQueryContainer。 Lambda表达式本身没有类型,需要特定的自动转换上下文,您可以提供例如通过使用适当的委托类型构造函数。但同样:我不相信??一侧的接口和另一侧的lambda表达式有任何意义。

答案 1 :(得分:0)

感谢@Mrinal Kamboj的评论和@Wormbo的回答,我找到了自己的答案:
我将参数类型更改为QueryContainer,如果参数为null,则创建一个新的QueryMatchAll查询,这对我有用:

public void ProcessQuery(QueryContainer query = null)
{

   var searchResult = this._client.Search<T>(
                s => s
                    .Index(MyIndex)
                    .AllTypes()
                    .From(0)
                    .Take(10)
                    .Query(query ?? new MatchAllQuery()) // Now works
                    .SearchType(SearchType.Scan)
                    .Scroll("2m")
                );
}