如何使用 Cosmos DB 提供程序使用 LINQ 查询 EF Core 中的字典属性

问题描述 投票:0回答:1

我有一个使用 EF Core 映射到 Cosmos DB 容器的类 Entity。该类具有类型为

Labels
的属性
Dictionary<string, string>
。我如何找到该类的所有具有
Labels["thing"] == "one"
的实例。该行:
context.Entities.Where(e => e.Labels["thing"] == "one").ToList()
抛出异常:

System.InvalidOperationException:无法翻译 LINQ 表达式

DbSet<Entity>().Where(e => e.Labels.get_Item("thing") == "one")
。要么以可翻译的形式重写查询,要么切换到客户评估...

.net entity-framework-core azure-cosmosdb
1个回答
0
投票

要在 EF 中查询具有 Dictionary 类型的 Labels 属性的实体类,不能直接使用索引语法(如 Labels["thing"])。这会导致错误,因为 LINQ 表达式的该部分无法转换为 Cosmos DB 理解的格式。 相反,您可以使用 ContainsKey 检查字典是否包含该键,然后比较该值。像这样的东西:

var results = context.Entities
.Where(e => e.Labels.ContainsKey("thing") && e.Labels["thing"] == "one")
.ToList();

或者在数据库不处理过滤的情况下我不会推荐这种其他方法

var results = context.Entities
.ToList()
.Where(e => e.Labels.ContainsKey("thing") && e.Labels["thing"] == "one")
.ToList();
© www.soinside.com 2019 - 2024. All rights reserved.