获取通过 LINQ 生成的 Cosmos DB 查询的底层 SQL
Get to underlying SQL for Cosmos DB Query generated via LINQ
我正在使用 Linq 创建对 cosmos 的查询
这将转换为 SQL,然后 运行 进行搜索
var modelName = "Mondeo";
var baseQuery = client.CreateDocumentQuery<Car>(StaticSettings.ProjectionsCollectionUri,
new FeedOptions { MaxItemCount = maxItemCount, PartitionKey = new PartitionKey(partitionKey) })
.Where(order => car.ModelName == modelName);
如果我 运行 此代码并在此语句之后放置一个断点,我可以看到生成的原始 SQL 查询
这显示在检查器的第一行
{{"query":"SQL HERE"}}
我怎样才能通过代码得到这个?
我正在寻找这个 SQL 以确保它是我想要的并且我可以在我的测试中使用它
保罗
假设您正在使用 Visual Studio,默认情况下,调试器会在检查器中向您显示任何给定对象的 ToString()
的输出。
有了这些知识,您可以使用以下代码检索相同的查询字符串对象。
var serializedQuery = baseQuery.ToString(); // "{{\"query\":\"SQL HERE\"}}"
结果似乎是一个序列化的 JSON 对象,它包装了实际的 SQL 查询。您可以使用以下代码轻松提取 SQL 和 Newtonsoft.Json。
var sql = JObject.Parse(serializedQuery)["query"].Value<string>(); \ "SQL HERE"
编辑: 在当前版本的 SDK 中,解决方案如下所示。
var baseQuery = container
.GetItemLinqQueryable<Car>(
requestOptions: new QueryRequestOptions
{
MaxItemCount = maxItemCount,
PartitionKey = new PartitionKey(partitionKey)
}
)
.Where(order => car.ModelName == modelName);
var sql = baseQuery.ToQueryDefinition().QueryText; // "SQL HERE"
我正在使用 Linq 创建对 cosmos 的查询
这将转换为 SQL,然后 运行 进行搜索
var modelName = "Mondeo";
var baseQuery = client.CreateDocumentQuery<Car>(StaticSettings.ProjectionsCollectionUri,
new FeedOptions { MaxItemCount = maxItemCount, PartitionKey = new PartitionKey(partitionKey) })
.Where(order => car.ModelName == modelName);
如果我 运行 此代码并在此语句之后放置一个断点,我可以看到生成的原始 SQL 查询
这显示在检查器的第一行
{{"query":"SQL HERE"}}
我怎样才能通过代码得到这个?
我正在寻找这个 SQL 以确保它是我想要的并且我可以在我的测试中使用它
保罗
假设您正在使用 Visual Studio,默认情况下,调试器会在检查器中向您显示任何给定对象的 ToString()
的输出。
有了这些知识,您可以使用以下代码检索相同的查询字符串对象。
var serializedQuery = baseQuery.ToString(); // "{{\"query\":\"SQL HERE\"}}"
结果似乎是一个序列化的 JSON 对象,它包装了实际的 SQL 查询。您可以使用以下代码轻松提取 SQL 和 Newtonsoft.Json。
var sql = JObject.Parse(serializedQuery)["query"].Value<string>(); \ "SQL HERE"
编辑: 在当前版本的 SDK 中,解决方案如下所示。
var baseQuery = container
.GetItemLinqQueryable<Car>(
requestOptions: new QueryRequestOptions
{
MaxItemCount = maxItemCount,
PartitionKey = new PartitionKey(partitionKey)
}
)
.Where(order => car.ModelName == modelName);
var sql = baseQuery.ToQueryDefinition().QueryText; // "SQL HERE"