获取通过LINQ生成的Cosmos DB查询的底层SQL
我正在使用Linq创建对cosmos的查询 这将转换为SQL,然后运行SQL进行搜索获取通过LINQ生成的Cosmos DB查询的底层SQL,linq,azure-cosmosdb,iqueryable,azure-cosmosdb-sqlapi,Linq,Azure Cosmosdb,Iqueryable,Azure Cosmosdb Sqlapi,我正在使用Linq创建对cosmos的查询 这将转换为SQL,然后运行SQL进行搜索 var modelName = "Mondeo"; var baseQuery = client.CreateDocumentQuery<Car>(StaticSettings.ProjectionsCollectionUri, new FeedOptions { MaxItemCount = maxItemCount, PartitionKey = new PartitionKey(parti
var modelName = "Mondeo";
var baseQuery = client.CreateDocumentQuery<Car>(StaticSettings.ProjectionsCollectionUri,
new FeedOptions { MaxItemCount = maxItemCount, PartitionKey = new PartitionKey(partitionKey) })
.Where(order => car.ModelName == modelName);
我如何通过密码到达这里
我正在寻找这个SQL,以确保它是我想要的,并且我可以在测试中使用它
Paul假设您使用的是Visual Studio,默认情况下,调试器将在任何给定对象的检查器中显示
ToString()
的输出
有了这些知识,您可以使用以下代码检索相同的查询字符串对象
var serializedQuery=baseQuery.ToString();//“{{\“query\”:\“SQL HERE\”}}”
结果似乎是一个序列化的JSON对象,它封装了实际的SQL查询。您可以使用以下代码轻松地提取SQL
var sql=JObject.Parse(serializedQuery)[“query”].Value();\ \“SQL在此”
编辑:在当前版本的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"
var baseQuery=container
.GetItemLinqQueryable(
requestOptions:新的QueryRequestOptions
{
MaxItemCount=MaxItemCount,
PartitionKey=新的PartitionKey(PartitionKey)
}
)
.Where(order=>car.ModelName==ModelName);
var sql=baseQuery.ToQueryDefinition().QueryText;//“SQL此处”
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"