嗨,我需要帮助从JSON文件中创建的对象列表中查找值:
JSON结构:
{
"mp": "1",
"mpuus": [
{
"id": "100",
"tpuus": [
"000000001",
"000000002"
]
},
{
"id": "101",
"tpuus": [
"00000003"
]
}
]
},
{
"mp": "2",
"mpuus": [
{
"id": "200",
"tpuus": [
"0000004"
]
}
]
},
我将JSON转换为
RootMedicationMapping object.
List<rootMedicationMapping> = JsonHandler.DeserializeJasonArrayFromFile<RootMedicationMapping>(@"JSON File PATH");
我想通过tpuu值搜索rootDruitationMapping的列表,并获得mp值。
例如,我传递的值是tpuu=000000002,我想取回mp值(在这种情况下为1)
我正在尝试下面的语法,但它正在折磨我
'无法将类型"string"简单转换为"bool">
var mpId= rootMedicationMapping.Find(x => x.MPUUs.Find(y=>y.Tpuus.Find(z=>z.Equals("tpuu value"))));
List.Find(Predicate)的参数需要是一个Predicate,它是一个委托,接受您正在搜索的对象的实例,并期望返回指定对象是否匹配的bool。目前,在内部Find调用的谓词中,您只是返回另一个Find调用结果,该调用是字符串,而不是预期的布尔。这导致了您看到的错误。
要解决这个问题,您只需要确保谓词参数返回bool。有了这些,您只需添加检查内部Find调用是否返回null
:
var mpId =
rootMedicationMapping.Find(x =>
x.MPUUs.Find(y =>
y.Tpuus.Find(z =>
z.Equals("tpuu value")) != null) != null)?.mp;
您也可以使用LINQ编写,允许Any
:处理空检查
var mpId =
rootMedicationMapping.FirstOrDefault(x =>
x.MPUUs.Any(y =>
y.Tpuus.Any(z =>
z.Equals("tpuu value"))))?.mp;