gpt4 book ai didi

c# - Cosmos DB SQL API NOT IN 运算符采用 List WithParameter(List) 不起作用

转载 作者:行者123 更新时间:2023-12-05 03:37:52 26 4
gpt4 key购买 nike

var ids = IdsList.Select(pID => pID.ID).ToArray();

var response= await MyService.GetByMyQuery(
new QueryDefinition(
"SELECT * FROM p WHERE p.id NOT IN(@ids)"
)
.WithParameter("@ids", string.Join(",", ids)),
);

所以这是行不通的。运算符返回所有项目,而不仅仅是不在列表中的项目。在 cosmos DB SQL 查询编辑器中我可以轻松做到

SELECT * FROM p WHERE p.id NOT IN("id1","id2")

它毫无问题地返回了预期的结果。所以我猜问题出在代码层,即我将 id 传递给 WithParameter() menthod 的方式。

非常感谢任何见解。

最佳答案

问题

您的 C# 代码没有发送多个值作为 @ids 参数,而是发送一个字符串值,实际上是这样的:

SELECT * FROM p 
WHERE p.id NOT IN("id1, id2")

由于此复合 ID 不存在,因此它会返回您观察到的所有项目。

解决方案

IN 关键字也有可能,但我确信这种模式会起作用:

SELECT * FROM p 
WHERE NOT ARRAY_CONTAINS(@ids, p.id)

注意!如果我弄错了请纠正我,但这种情况很可能不会由索引提供。因此,您可能需要重新考虑您的设计,除非您的真实案例有一个额外的良好可索引谓词,否则它会很慢且代价高昂。

关于c# - Cosmos DB SQL API NOT IN 运算符采用 List WithParameter(List<t>) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69123474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com