我正在尝试创建一个处理某个查询的方法。我按照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")
);
}
答案 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")
);
}