【发布时间】:2018-06-11 08:28:31
【问题描述】:
我正在尝试遵循here 提出的解决方案,但仍然没有成功:
此查询返回null:
var plan = _dbClient.CreateDocumentQuery<Plan>(_collectionUri)
.SelectMany(p => p.Users.Where(u => u.Id == userId)
.Select(u => p))
.AsEnumerable()
.FirstOrDefault();
虽然这会返回我正在搜索的文档(我试图在 Where 之前不要离开 AsEnumerable:
var plan = _dbClient.CreateDocumentQuery<Plan>(_collectionUri)
.AsEnumerable()
.Where(p => p.Users.Any(u => u.Id == userId))
.FirstOrDefault();
这是文档的样子:
{
"id": "9710ef23-aae5-4215-a45b-641185140722",
"title": "Free Plan",
"planId": "freeplan",
"ranking": 1,
"description": "Most basic features",
"startFrom": "2018-01-01",
"monthlyCost": 0,
"details": [
// supressed
],
"users": [
{
"id": "11111111-2222-333-4444-5555555555555",
"enrolledIn": "2017-07-30 08:00:01"
},
{
"id": "4760c977-6bcf-497d-96eb-c43e5bcf1ab9",
"enrolledIn": "1981-07-05 08:00:01"
}
],
}
提前谢谢你!
【问题讨论】:
-
那么,
userId是否等于任何记录的Id、大小写和所有? -
不要这样使用SDK。同步 LINQ 调用将通过网络发送许多分页请求并阻塞您的线程。请改用 .ExecuteAsync 方法。 Cosmonaut 解释了如何做到这一点。
-
@CodeCaster 这是一个很好的见解。我修复了将
User中的id重命名为UserId的问题。id实际上是来自外部代理,调用它Id肯定会在查询时引起一些混乱。 -
@NickChapsas 我看到您正在推广您创建的库。看起来不错,但是这个项目真的很小,除非绝对必要,否则我想保持它“简单”(没有外部库)。我将来可能会使用。
-
@luizs81 它与您引用的库(这是一个外部库)具有相同的依赖关系,但是是的,只是不要在
CreateDocumentQuery上执行.FirstOrDefault()或ToList()IQueryable因为这是一个很大的错误。
标签: c# linq azure azure-cosmosdb