使用 lambda 表达式将 JSON 字段设置为 null

Setting JSON field to null using lambda expression

我有一个看起来像这样的 JSON:

"items": [
        "something": "",
        "something_2": "",
        "field_of_interest": {
          "blah": [
            {
              "placeholder": "1",
              "category": "random"
            },
            {
              "placeholder": "2",
              "category": "random",
              "field_to_null": {
                "something_here": "",
              }
            }
          ]
        }
      ]

我正在尝试将“field_to_null”字段设置为空。这些 JSON 字段都被封装到对象中,我有一个看起来像这样的表达式:

 Items.Select(x => x.FieldOfInterest)
       .Select(y => y.Blah
       .Select(z => z.FieldToNull).ToList().ForEach(a => a = null));

但是我在第二个 .Select 上遇到错误。发现错误 hereItemsItems 个对象的列表,BlahFieldOfInterest 个对象的列表。我对 C# 和编写 lambda linq 表达式还很陌生,因此非常感谢您的帮助。

Linq 的一般哲学是不改变事物,这解释了为什么 ForEach 不是 Linq 扩展方法,而是某些集合类型的方法,例如 List

通常尽量避免在 Linq 运算符中使用不纯的 lambda。

尽管如此,您仍然可以使用 Linq 进行变异,通过投影,使用 Select 运算符,并向其传递一个 lambda,它将 return 变异参数。 这是结果。

Items
    .Select(i => 
    {
        i.FieldOfInterest.Blah = i.FieldOfInterest.Blah
            .Select(bi => 
            {
                bi.field_to_null = null;
                return bi;
            })
            .ToList() // Transform to the needed collection type
        return i;
    });

这相当于:

foreach(var i in Items)
{
    foreach(var bi in i.field_of_interest.Blah)
    {
        bi.field_to_null = null;
    }
}

Non-Linq 方法显然更具可读性。