无法隐式将类型 'string' 转换为'bool' JSON



嗨,我需要帮助从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;