Pau*_*aul 5 linq iqueryable azure-cosmosdb azure-cosmosdb-sqlapi
我正在使用 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);
Run Code Online (Sandbox Code Playgroud)
如果我运行此代码并在此语句后放置一个断点,我可以看到生成的原始 SQL 查询
这显示在检查器的第一行
{{"query":"SQL HERE"}}
Run Code Online (Sandbox Code Playgroud)
我怎样才能通过代码达到这个目的?
我希望得到这个 SQL 以确保它是我想要的并且我可以在我的测试中使用它
保罗
bug*_*d87 12
ToString()假设您使用的是 Visual Studio,默认情况下调试器将在检查器中向您显示任何给定对象的输出。
有了这些知识,您就可以使用以下代码检索相同的查询字符串对象。
var serializedQuery = baseQuery.ToString(); // "{{\"query\":\"SQL HERE\"}}"
结果似乎是一个序列化的 JSON 对象,它包装了实际的 SQL 查询。您可以使用以下代码轻松地使用Newtonsoft.Json提取 SQL 。
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |