C# ';加入';方法在cosmos DB 3.3.0中不受支持,是否有其他选项

C# ';加入';方法在cosmos DB 3.3.0中不受支持,是否有其他选项,c#,linq,azure-cosmosdb,azure-cosmosdb-sqlapi,C#,Linq,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我正在查询报告生成,下面是一些在生成过程中通过的场景 var account_logs = container.GetItemLinqQueryable<AccountLog>(true).Where(u => u.AccessedOn > MinDate); var TempGoodResetIDs = (from ll in account_logs where (ll.Ac

我正在查询报告生成,下面是一些在生成过程中通过的场景

 var account_logs =  container.GetItemLinqQueryable<AccountLog>(true).Where(u => u.AccessedOn > MinDate);

            var TempGoodResetIDs = (from ll in account_logs
                                where (ll.AccessedOn >= StartDate) &&
                                (ll.AccessedOn <= EndDate)
                                && ((ll.Activity == 3) &&
                                   ((ll.Result == (int)Log.AccountResult.PasswordReset) ||
                                   (ll.Result == (int)Log.AccountResult.TempPWDSentThroughEmail)))
                                select ll)
这里我得到了一个例外,Cosmos中不支持“Join”。是否有一个解决方法,可以使用BadResetId(一个iquerable并包含活动ID)来连接Cosmos文档? 我使用了SelectMany,但不确定是谁比较了两个不同的对象accountlog和BadResetId。

,而它只通过在单个文档中连接数据起作用。Cosmos不支持在查询中连接多个文档,因此不支持LINQ
join
运算符

在您的情况下,您可以通过执行两个查询来解决问题。但是,您将把数据从数据库移动到客户端以创建第二个查询,同时您将面临数据库发生更改的风险

希望在查询中连接文档可能是您正在Cosmos之上改进关系数据库方法的标志。从一开始就基于“无SQL”思想设计您的系统可能会导致非常不同的数据模型


如果您真的变得技术化,那么对于不能组合多个文档的查询,有一个例外:您可以用javascript创建一个存储过程来实现这一点。但是,一个存储过程只能在一个分区内执行,因此在一个查询中组合多个文档并不是一个通用的解决方案。

能否提供一个示例文档和您得到的完整错误消息。Cosmos DB中支持文档内连接,这似乎是您在此处尝试执行的操作,因此这可能只是查询中的一个问题。这是错误。不支持方法“Join”,Windows/10.0.16299 Cosmos netstandard sdk/3.3.0如果没有示例json文档,很难提供帮助,但您可以查看其中描述了Linq操作符如何映射到Cosmos DB查询语言,包括如何实现文档内连接。
 var BadResetIDs = TempBadResetIDs.Select(ll => ll.ActivityID).Distinct().Except(GoodResetIDs);


            var Captcha = (from ll in account_logs
                           join
                             b in BadResetIDs on ll.ActivityID equals b
                             where ((ll.Activity == 3) && (ll.Result == 5))
                             select ll.ActivityID).Count()