如果我有来自 Cosmos DB 容器的可查询。如果我用这两种不同的方式编写代码会对性能产生什么影响?
query.Where(x=>x.a=1 && x.b=2);
query.Where(x=>x.a=1).Where(x=>x.b=2);
我尝试使用
query.Expression.ToString()
获取查询表达式,但输出仍然非常像 C# 代码,而不是类似 sql。所以,我不知道它会在服务器端执行什么样的查询。
这两个查询会生成相同/相似的服务器端查询吗?
有没有办法像本文档中那样获取生成的sql查询?
谢谢
您可以尝试将
Func<>
的委托 (IQueryable<>
) 解析为 string
以获得所需的结果。
Cosmos DB 的 LINQ 提供程序将在服务器端将条件合并到单个
WHERE
子句中,无论您使用的是一个 .Where()
还是多个链式调用。
您的两个示例都会生成相同的查询:
SELECT * FROM c WHERE c.a = 1 AND c.b = 2
Cosmos DB LINQ 提供程序在优化查询翻译方面足够好,因此您可以安全地操作这两个选项。