1

我有一个使用 IRavenQueryable.Search 方法返回有效搜索结果的查询。但是,我想通过 .Where 方法调用进一步过滤这些结果,以便随后过滤搜索结果以仅包括那些具有匹配 ProjectId 的结果。

我的对象结构是一组项目实体,每个实体都包含一组问题实体。

我的索引创建问题搜索结果的投影,如下所示:

{Id、Key、Summary、Description、ProjectId、ProjectKey、Query}

Query 属性是关键字搜索使用的 object[]。

当我运行关键字搜索时:

var results = session.Query().AsProjection().Search(x => x.Query, "some key word");

我得到了正确的结果。但是当我尝试也应用 Where 方法时:

结果 = results.Where(i => i.ProjectId == SelectedProject.Id);

它不会过滤结果,而是包含具有匹配项目 ID 的所有其他结果。

在这种情况下,强制 Linq 或 RavenDB 的 IRavenQueryable 应用 AND 而不是 OR 的正确方法是什么?

4

1 回答 1

1

发布此问题后,我设法在 stackoverflow 的其他地方找到了答案。

这是解决方案:

ravendb 将 Search 与 Where 相结合

简而言之,Search 方法提供了一个额外的可选参数 [options] 以允许您指定搜索如何与查询中的其他 where 子句组合。它默认为 SearchOptions.Or,因此您需要将其显式设置为选项:SearchOptions.And。

于 2012-08-17T18:58:18.347 回答