LINQ pour accéder à une des propriétés des objets dans un autre objet

voix
0

Je dois obtenir une valeur d'un objet dans un autre objet. Mon problème est que je ne peux pas accéder à toutes les valeurs à l'intérieur du sous-objet, je reçois toujours la valeur de l'objet lui-même de type.

Code où je suis accès à l'objet

var test = scheduledTask.Fields.Select(x => x.FieldValue);

Cela ramène à la vue des résultats

[0] 10111
[1] {ObjectType.Extension} 

Je dois accéder à l'élément [1] qui contient les propriétés suivantes (entre autres), et j'ai besoin pour accéder au DisplayName

{
DisplayName: MainMenu,
CategoryId: -1,
Id: 433
}

TâchePlanifiée est

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
Créé 03/12/2019 à 00:03
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Supposant x.FieldValueest un que objectvous pouvez essayer de coulée pour vérifier si elle est de type ObjectType.Extension:

var test = scheduledTask.Fields.Select(x => {
   var asExtension = x.FieldValue as ObjectType.Extension;
   if(asExtension != null) return asExtension.DisplayName;
   else return x.FieldValue;
});

ETA: L' asopérateur est une sorte de coffre - fort-cast qui renverra NULL si le type d'exécution de l' argument LHS ne correspond pas au type statique identifié par l'argument RHS.

Créé 03/12/2019 à 00:07
source utilisateur

voix
2

Vous ne LINQ pas besoin d'accéder à un index spécifique d'un tableau.

string name = (scheduledTask.Fields[1].FieldValue as ObjectType.Extension)?.DisplayName;

Étant donné que le tableau contient des valeurs de différents types , je suppose que nous avons un tableau de object. Par conséquent , nous devons mettre le type devrait être en mesure de champs spécifiques d'accès ou des propriétés.

Si la valeur est nulle ou le type ne correspond pas à asse produire null. Les opérateurs de null conditionnelle ?.effectue une opération d' accès membre ou de l' élément que si un opérande est non nulle et sinon revenir null.

Si vous ne connaissez pas l'indice de la valeur requise, vous pouvez interroger avec

string name = (scheduledTask.Fields
    .Select(x => x.FieldValue)
    .OfType<ObjectType.Extension>()
    .FirstOrDefault()
)?.DisplayName;

Si vous êtes sûr que la valeur requise est là et non nulle, vous pouvez déposer le ?.

Créé 03/12/2019 à 00:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more