首页 > 解决方案 > 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 函数的能力)还是这不可能?

谢谢 :-)

标签: c#vb.netlinqlambdadynamic

解决方案


最后,我最终使用了一些从注释之一指向 Newtonsoft 库中的 JObject 对象的指针,并且发现了使用 JSONPath 动态查询对象的能力。这解决了我的问题(没有动态 Linq 库,据我所知,它不允许您查询嵌套数组对象)。

链接在这里了解更多信息:https ://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm

和一个有效的例子:

jObj.SelectToken("$.Sites[*].SiteProducts[?(@.ProductName == 'Widget')].Quantity")

谢谢指导:)


推荐阅读