使用 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
上遇到错误。发现错误 here。 Items
是 Items
个对象的列表,Blah
是 FieldOfInterest
个对象的列表。我对 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 方法显然更具可读性。
我有一个看起来像这样的 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
上遇到错误。发现错误 here。 Items
是 Items
个对象的列表,Blah
是 FieldOfInterest
个对象的列表。我对 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 方法显然更具可读性。