操作员 '??'不能应用于 IQueryContainer 类型的操作数和 lambda 表达式
Operator '??' cannot be applied to operands of type IQueryContainer and lambda expression
我正在尝试创建一种方法来处理某个查询。我按照 Nest repository(第 60 行)上发布的示例进行操作,但编译器仍然无法识别 MatchAll,如果我尝试构建解决方案,显示的错误是:
Operator '??' cannot be applied to operands of type IQueryContainer and lambda expression
到目前为止,这是我的方法:
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")
);
}
lambda 表达式的类型可以转换为 Expression
或某种委托类型,但很可能不能转换为 IQueryContainer
。 Lambda 表达式本身没有类型,需要自动转换的特定上下文,您可以提供例如通过使用适当的委托类型构造函数。但同样:我不相信 ??
一侧的接口和另一侧的 lambda 表达式有任何意义。
感谢@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")
);
}
我正在尝试创建一种方法来处理某个查询。我按照 Nest repository(第 60 行)上发布的示例进行操作,但编译器仍然无法识别 MatchAll,如果我尝试构建解决方案,显示的错误是:
Operator '??' cannot be applied to operands of type IQueryContainer and lambda expression
到目前为止,这是我的方法:
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")
);
}
lambda 表达式的类型可以转换为 Expression
或某种委托类型,但很可能不能转换为 IQueryContainer
。 Lambda 表达式本身没有类型,需要自动转换的特定上下文,您可以提供例如通过使用适当的委托类型构造函数。但同样:我不相信 ??
一侧的接口和另一侧的 lambda 表达式有任何意义。
感谢@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")
);
}