文档数据库 linq 查询,SelectMany 之后的 SelectMany
Document db linq query, SelectMany after SelectMany
我正在使用 linq 在 documentdb 集合中进行查询,该集合由具有两个单独数组的项目组成,例如:
{
name: "Family 1",
cars: ["Toyota", "Honda"],
pets: ["Cat", "Dog"]
}
假设我想查找拥有丰田汽车的家庭,我会使用这样的查询:
var families = Client.CreateDocumentQuery<T>(dLink)
.SelectMany(f => f.Cars
.Where(car=> car == "Toyota")
.Select(car => f));
这很好用。检查生成的 sql 查询时,它看起来也符合预期:
SELECT VALUE root FROM root JOIN car IN root[\"Cars\"] WHERE (car= \"OU=Brugere\")
如果我想找到所有拥有丰田和狗的家庭,我希望能够使用如下所示的查询:
var families = Client.CreateDocumentQuery<T>(dLink)
.SelectMany(f => f.Cars
.Where(car=> car == "Toyota")
.Select(car => f))
.SelectMany(f => f.Pets
.Where(pet => pet == "Dog")
.Select(pet => f));
此操作失败并显示一条神秘的错误消息:
{"errors":[{"severity":"Error","location":{"start":109,"end":111},"code":"SC2001","message":"Identifier 'pet' could not be resolved."}]}
检查生成的 sql 查询时,它看起来不像预期的那样:
SELECT VALUE root FROM root JOIN car IN root[\"Cars\"] WHERE ((car= \"Toyota\") AND (pet = \"Dog\")) "}
这很明显为什么 'pet' 无法解析,它在 root 中缺少一个 Join for pet [\"Pets"]
如何在 documentdb 中通过 linq 进行两个不同的连接?
鉴于 toString()
的 SQL 输出,看起来 LINQ 提供程序中存在错误。我们将努力解决问题。
同时,我建议将查询作为 SQL 查询发出:
SELECT *
FROM c
WHERE ARRAY_CONTAINS(c.cars, "Toyota")
AND ARRAY_CONTAINS(c.pets, "Cat")
我正在使用 linq 在 documentdb 集合中进行查询,该集合由具有两个单独数组的项目组成,例如:
{
name: "Family 1",
cars: ["Toyota", "Honda"],
pets: ["Cat", "Dog"]
}
假设我想查找拥有丰田汽车的家庭,我会使用这样的查询:
var families = Client.CreateDocumentQuery<T>(dLink)
.SelectMany(f => f.Cars
.Where(car=> car == "Toyota")
.Select(car => f));
这很好用。检查生成的 sql 查询时,它看起来也符合预期:
SELECT VALUE root FROM root JOIN car IN root[\"Cars\"] WHERE (car= \"OU=Brugere\")
如果我想找到所有拥有丰田和狗的家庭,我希望能够使用如下所示的查询:
var families = Client.CreateDocumentQuery<T>(dLink)
.SelectMany(f => f.Cars
.Where(car=> car == "Toyota")
.Select(car => f))
.SelectMany(f => f.Pets
.Where(pet => pet == "Dog")
.Select(pet => f));
此操作失败并显示一条神秘的错误消息:
{"errors":[{"severity":"Error","location":{"start":109,"end":111},"code":"SC2001","message":"Identifier 'pet' could not be resolved."}]}
检查生成的 sql 查询时,它看起来不像预期的那样:
SELECT VALUE root FROM root JOIN car IN root[\"Cars\"] WHERE ((car= \"Toyota\") AND (pet = \"Dog\")) "}
这很明显为什么 'pet' 无法解析,它在 root 中缺少一个 Join for pet [\"Pets"]
如何在 documentdb 中通过 linq 进行两个不同的连接?
鉴于 toString()
的 SQL 输出,看起来 LINQ 提供程序中存在错误。我们将努力解决问题。
同时,我建议将查询作为 SQL 查询发出:
SELECT *
FROM c
WHERE ARRAY_CONTAINS(c.cars, "Toyota")
AND ARRAY_CONTAINS(c.pets, "Cat")