我有一个使用IRavenQueryable.Search方法返回有效搜索结果的查询。但是,我想通过.Where方法调用进一步过滤这些结果,以便搜索结果然后被过滤为仅包含具有匹配ProjectId的搜索结果。
我的对象结构是一组Project实体,每个实体都包含一组Issue实体。
我的索引创建问题搜索结果的投影,如下所示:
{Id,Key,Summary,Description,ProjectId,ProjectKey,Query}
Query属性是关键字搜索使用的对象[]。
当我运行关键字搜索时:
var results = session.Query()。AsProjection()。Search(x => x.Query,“some key word”);
我得到了正确的结果。但是当我尝试也应用Where方法时:
results = results.Where(i => i.ProjectId == SelectedProject.Id);
它不会过滤结果,而是包含匹配项目ID的所有其他结果。
在这种情况下,强制Linq或RavenDB的IRavenQueryable应用AND而不是OR的正确方法是什么?
答案 0 :(得分:1)
发布此问题后,我设法在stackoverflow上的其他地方找到答案。
以下是解决方案:
ravendb combining Search with Where
简而言之,Search方法提供了一个额外的可选参数[options],允许您指定搜索与查询中的其他where子句的组合方式。它默认为SearchOptions.Or,因此您需要将其显式设置为选项:SearchOptions.And。