C# RavenDB对子对象的任何查询都会返回不正确的结果

C# RavenDB对子对象的任何查询都会返回不正确的结果,c#,linq,ravendb,C#,Linq,Ravendb,我有一个RavenDB查询,可以在文档上搜索活动用户 正常查询如下所示: var documents = session.Query<Document>().Where(d => d.Users.Any(u => u.Id == UserId && u.Active == true)).ToList(); from doc in docs.Documents select new { Users_Active = ( from d

我有一个RavenDB查询,可以在文档上搜索活动用户

正常查询如下所示:

var documents = session.Query<Document>().Where(d => d.Users.Any(u => u.Id == UserId && u.Active == true)).ToList();
from doc in docs.Documents
select new {
    Users_Active = (
        from docUsersItem in ((IEnumerable<dynamic>)doc.Users).DefaultIfEmpty()
        select docUsersItem.Active).ToArray(),
    Users_Id = (
        from docUsersItem in ((IEnumerable<dynamic>)doc.Users).DefaultIfEmpty()
        select docUsersItem.Id).ToArray()
}
查询将匹配数组中的Id,在活动数组中为true,即使它们在各自数组中的索引不同

我需要对索引进行哪些更改才能使其仅返回用户ID正确且处于活动状态的文档


为了避免将来使用自动索引时出现这种情况,是否有任何方法可以重写我的LINQ查询,使其能够正确索引和执行?

这是通过使用自动索引的设计行为实现的。您可以通过定义自己的索引来避免这种行为,该索引将为文档上的每个用户发出一个索引项


这是自动索引的默认行为的原因是,在绝大多数情况下,这对用户来说并不重要,但它在服务器端具有极高的潜在成本,因此我们希望用户对此做出明确的决定。

如果它在服务器端具有高性能成本,是否最好将查询结果作为正常结果接受,然后在C#中过滤掉不正确的结果?不,如果您确实需要,性能成本是可以的,并且主要用于索引。问题是,如果我们默认这样做,那将是错误的。
AssignedUsers_Id: [1, 2]
AssignedUsers_Active:[false, true]