C# 包含的CosmosDB Linq查询不是IDocumentQuery类型
我有一个和宇宙发展局合作的项目。起初我使用了EFCore的预览版,但它还不够成熟,所以我决定选择使用。我有一个linq语句,它基本上看两个属性是否包含一个子字符串列表-基本上我尝试做如下操作:C# 包含的CosmosDB Linq查询不是IDocumentQuery类型,c#,linq,azure-cosmosdb,C#,Linq,Azure Cosmosdb,我有一个和宇宙发展局合作的项目。起初我使用了EFCore的预览版,但它还不够成熟,所以我决定选择使用。我有一个linq语句,它基本上看两个属性是否包含一个子字符串列表-基本上我尝试做如下操作: SELECT * FROM c WHERE CONTAINS(c.Name, ListOfNames) AND CONTAINS(c.Producer, ListOfProducers); 或者一大堆: foreach(var name in nameList) { foreach(var pr
SELECT * FROM c WHERE CONTAINS(c.Name, ListOfNames) AND CONTAINS(c.Producer, ListOfProducers);
或者一大堆:
foreach(var name in nameList) {
foreach(var producer in producerList){
SELECT * FROM c WHERE c.Name == searchedName AND c.Producer == searchedProducer;
}
}
这可以通过以下Linq查询与EFCore SQL适配器一起使用:
public async void Search(List<string> producers, List<string> names){
await _store.Entity.Where(x => producers.Any(p => x.Producer.Contains(p)) && names.Any(w => x.Name.Contains(w))).ToListAsync()
}
但在CosmosDB数据资源管理器中执行以下操作将产生0个结果:
SELECT * FROM c WHERE CONTAINS(c.Name, '"Test" OR "Test2"')
鉴于常规包含:
SELECT * FROM c WHERE CONTAINS(c.Name, "Test")
也许我的策略是错误的。我想把它结合起来的主要原因是为了有更好的性能。我的搜索域大约有100000个文档,其中我有一个多达1000个制作人+姓名的列表。所以基本上我想看看我是否能在我的文档列表中找到给定的producer+name组合
致以最诚挚的问候首先,您不应该将T-SQL和Cosmos SQL API混用在一起。Cosmos db具有类似sql的查询语法,但不支持t-sql(它是针对MS sql的) 其次,
CONTAINS
in是一个字符串运算符,因此不能将其用于数组
我想您正在中查找
所以实际上您需要下一个查询:
SELECT * FROM c WHERE (c.Name IN("Test", "Test2")) AND (c.Producer IN("Producer1", "Producer2"))
我没有使用cosmonaut库,但在Microsoft LINQ provider for Document DB中,您的查询应如下所示:
var data = yourQueryable.Where(x => producers.Contains(x.Producer) && names.Contains(x.Name)).ToList();
首先,您不应该混合使用T-SQL和COSMOSSQLAPI。Cosmos db具有类似sql的查询语法,但不支持t-sql(它是针对MS sql的)
其次,CONTAINS
in是一个字符串运算符,因此不能将其用于数组
我想您正在
中查找
所以实际上您需要下一个查询:
SELECT * FROM c WHERE (c.Name IN("Test", "Test2")) AND (c.Producer IN("Producer1", "Producer2"))
我没有使用cosmonaut库,但在Microsoft LINQ provider for Document DB中,您的查询应如下所示:
var data = yourQueryable.Where(x => producers.Contains(x.Producer) && names.Contains(x.Name)).ToList();
你好,我是宇航员开发者。你能粘贴完整的宇航员查询片段以便我能帮助你吗?当您构建IQueryable时会引发此错误,该IQueryable不是来自CosmosStore
的Query()方法。您好,Nick,谢谢您的回复。它实际上只是像往常一样作为ICOSMStore注入,然后从构造函数抛出到存储中。所以.Query()函数就在上面,属于IQueryable类型。您好,我是宇航员开发者。你能粘贴完整的宇航员查询片段以便我能帮助你吗?当您构建IQueryable时会引发此错误,该IQueryable不是来自CosmosStore
的Query()方法。您好,Nick,谢谢您的回复。它实际上只是像往常一样作为ICOSMStore注入,然后从构造函数抛出到存储中。因此,.Query()函数就在这上面,属于IQueryable类型。这就像一个符咒——我发誓我已经尝试过了,但我想这段旅程已经很长了,我的眼睛一直在欺骗。谢谢这就像一个符咒——我发誓我已经试过了,但我想这段旅程已经很长了,我的眼睛一直在欺骗。谢谢