获取通过LINQ生成的Cosmos DB查询的底层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

我正在使用Linq创建对cosmos的查询

这将转换为SQL,然后运行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,以确保它是我想要的,并且我可以在测试中使用它


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"