【问题标题】:linq: from object in an object to just an objectlinq:从对象中的对象到只是一个对象
【发布时间】:2020-11-05 10:07:58
【问题描述】:

目前我正在使用这个 linq 表达式:

(group.Select(x => ((Dictionary<string, Object>)x).GetValueOrDefault("myvalue")))

我现在的问题是我在一个对象中有一个对象。

看起来是这样的:

这让我的 json 看起来像这样:

            "myvalue": [
            [
                {
                    "value1": "value1",
                    "value2": "value2",
                    "etc": "etc"
                }
            ],
            [
                {
                    "value1": "value1",
                    "value2": "value2",
                    "etc": "etc"
                }
            ]
        ]

我想要的样子:

所以我的 Json 看起来像这样:

            "myvalue": [
                {
                    "value1": "value1",
                    "value2": "value2",
                    "etc": "etc"
                },
                {
                    "value1": "value1",
                    "value2": "value2",
                    "etc": "etc"
                }
        ]

我假设我可以通过使用 .SelectMany(???).ToList() 来修复它,但我还没有找到这样做的方法。有谁知道我如何为自己的目的编写它?

【问题讨论】:

  • 你的班级怎么样?你能添加更多关于你当前使用的 linq 的信息吗

标签: c# json linq


【解决方案1】:

下面的代码 sn-p 应该可以工作

group
   .Select(x => ((Dictionary<string, Object>)x).GetValueOrDefault("myvalue"))
   .Where(v => v != null)
   .Select(v => 
    {
       if (v is IEnumerable enumerable)
         return enumerable.OfType<object>();
       return new [] { v }
    })
   .SelectMany(e => e)
   .ToList();

【讨论】:

  • 非常感谢。你介意向我解释一下第二个 .Select(v => {...}) 发生了什么吗?
  • 刚刚将 object 转换为 IEnumerable。然后您可以使用 SelectMany。此代码也可以移动到 SelectMany lambda。
【解决方案2】:

您可以像建议的其他答案一样使用SelectMany(),但如果您知道您总是会有一个元素,为什么不使用 .First() 像这样

(group.Select(x =&gt; ((Dictionary&lt;string, Object&gt;)x).GetValueOrDefault("myvalue")).First())

我认为

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多