【问题标题】:DocumentDB Linq query by object property in listDocumentDB Linq 按列表中的对象属性查询
【发布时间】: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


【解决方案1】:

首先,我测试了您的第一个 LINQ 查询,它对我很有效。

您需要检查对象中的案例问题是否对应于 LINQ。

其次,我测试了您的第二个 LINQ 查询,并将 AsEnumerable 保留在 Where 之前。出现错误:Method 'Any' is not supported.

请检查LINQ to SQL API,我建议你用ARRAY_CONTAINS制作sql。

希望对你有帮助。

【讨论】:

  • 我解决了将User 中的id 重命名为UserId 的问题。 id 实际上是来自外部代理,调用它Id 在进行查询时肯定会引起一些混乱。 (我认为不从Document 继承可能是问题,但它不相关)。关于Any 中的错误,这真的很奇怪,因为一旦您转换为 Enumerable,您应该可以访问所有 Linq 扩展,即使 DocumentDb 不支持的扩展
  • @luizs81 你在上面的 LINQ 支持列表中找到了 Any 吗?
  • 是的,据我所知。例如,如果您创建了一个List 对象,则可以使用Any() 来查询列表中的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
相关资源
最近更新 更多