c# - System.Linq.Dynamic.Core - 查询嵌套对象
问题描述
我有一个 JSON 文件,我将其反序列化为一个在基本结构级别具有以下内容的对象:
根
--- 网站
------ 网站产品
- - - - - 产品名称
- - - - - 数量
- - - - - 价格
- - - - - ETC。等等
我需要/希望能够动态查询此结构(站点/站点产品只是我需要查询的许多类似对象的一个示例),并且一直试图让动态 LINQ 工作。
此 LINQ 语句为我提供了与给定产品匹配的数量总和的输出:
json.Sites.Select(Function(s) s.SiteProducts.Where(Function(sp) sp.ProductName = "Widget").Select(Function(spd) spd.Quantity).Sum)
但是,我无法弄清楚相应的动态 LINQ。我认为这可能有效:
jsonObj.Select("new (Sites.Select(SiteProducts).Where(it.ProductName=""Widget"").Select(Quantity).Count())")
但不是,因为 siteproducts 不包含 ProductName。
这甚至可以使用动态 LINQ 吗?我看过动态 lambda 表达式,但它们看起来相当复杂。我想我只需要知道我是否遗漏了一些明显的东西(比如在我的动态选择/位置中轻松拥有 lambda 函数的能力)还是这不可能?
谢谢 :-)
解决方案
最后,我最终使用了一些从注释之一指向 Newtonsoft 库中的 JObject 对象的指针,并且发现了使用 JSONPath 动态查询对象的能力。这解决了我的问题(没有动态 Linq 库,据我所知,它不允许您查询嵌套数组对象)。
链接在这里了解更多信息:https ://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm
和一个有效的例子:
jObj.SelectToken("$.Sites[*].SiteProducts[?(@.ProductName == 'Widget')].Quantity")
谢谢指导:)
推荐阅读
- regex - 尝试匹配字符串时的正则表达式困境
- tensorflow2.0 - 创建 SparseCategoricalAccuracy 的修改版本,得到 ValueError: tf.function-decorated function tried to create variables on non-first call
- json - 如何使用 set_fact 打印数组变量以在 ansible add_host 模块中使用
- usb - 无需重启即可重启 USB 端口 (DevCon)
- azure-databricks - Azure Databricks 到 Azure SQL DW 连接
- javascript - 我不能调用 this.function: TypeError: this.fetchData is not a function
- r - 部署中 k-Means 聚类异常值检测的 Mahalanobis 距离
- bash - Linux bash:根据变量复制字符串n次
- neural-network - 用于位运算的神经网络 AND
- java - 我怎样才能改变这个矩阵的值,可以有一个带有数字的数组和一个带有单词的数组?