如何动态遍历(不同的)对象列表并获取特定属性的值?

尼尔斯

我的问题有点难以解释:

我正在调用一个API,该API可以返回不同对象的列表,因此该对象的类型不能在LINQ查询中使用。无论返回的对象是什么类型,在每个对象或子对象中,都有一个称为“ FleetId”的属性。

我想要实现的是遍历返回的列表并获取Property“ FleetId”的值,其中一个API调用结果如下所示:

在此处输入图片说明

如您所见,该对象具有属性UserRole,在这种情况下,“ FleetId”位于该列表中:

在此处输入图片说明

所以我想要达到的目标:

无论“ FleetId”位于何处,我都需要迭代直到找到它。因此,迭代也需要遍历子对象(如果有)。

如何使用LINQ以最佳方式实现这一目标?

乔乔

您可以使用switch语句将对象转换为各自的类型。

var fleetId = 1;
var fleetWhereIdIs1 = Results.Where(obj => 
{
    switch(obj)
    {
        case User user:
            return user.UserRoles.Any(role => role.FleetId == fleetId);
        case OtherObj obj:
            // Get fleet id from other object
            return <other_condition_here>;
        default:
            // default condition if no other condition met
            return default;
    }
}).ToList();

或者来自C#8的(IMO)更优雅的模式匹配开关

var fleetWhereIdIs1 = Results.Where(obj => 
{
    return obj switch
    {
        User user => user.UserRoles.Any(role => role.FleetId == fleetId),
        OtherObj obj =>  <other_condition_here>,
        _ => default
    };
}).ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章