我需要能够根据某些条件将不同的查询类型添加到我的Bool查询中,但是我不知道如何执行此操作,因为Must()
函数要求params QueryContainer[] queries
例如,这是我可以做的:
desc.Query(qq => qq.Bool(qqq => qqq.Must(m => m.Range(r => r.OnField("lastModified").GreaterOrEquals("from").LowerOrEquals("to")), s => s.Prefix(p => p.OnField("test").Value("query")))));
如您所见,
Range
查询和Prefix
查询在这里一起使用,但是在Must
方法中用逗号分隔。我需要能够做更多类似的事情:List<QueryContainer> queryList = new List<QueryContainer>();
// Range
if (searchTypes.Contains(5)) {
QueryDescriptor<BackupEntitySearchDocument> qd = new QueryDescriptor<BackupEntitySearchDocument>();
qd.Range(r => r.OnField("lastModified").GreaterOrEquals("from").LowerOrEquals("to"));
queryList.Add(qd);
}
/// A couple other query types may be added to queryList here
desc.Query(qq => qq.Bool(b => b.Must(queryList)));
然后能够检查并可能添加到
queryList
列表中的多个其他条件。那有意义吗?关于如何获得此功能的任何想法?
最佳答案
您只需要在必须的queryList中添加.ToArray()即可:
desc.Query(qq => qq.Bool(b => b.Must(queryList.ToArray())));