Mit Linq für den Zugriff auf Eigenschaften aN Objekten in einem anderen Objekt

stimmen
0

Ich brauche einen Wert von einem Objekt innerhalb eines anderen Objekts zu erhalten. Mein Problem ist, ich keine Werte aus dem Unterobjekt zugreifen kann, erhalte ich immer den Wert des selbst Objekttypen.

Code, wo ich das Objekt bin Zugriff

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

Das bringt wieder in der Ergebnisansicht

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

Ich brauche das [1] Element zuzugreifen, das die folgenden Eigenschaften (unter anderem) enthält, und ich brauche die Display zugreifen

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

ScheduledTask ist

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
Veröffentlicht am 03/12/2019 um 00:03
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Unter der Annahme , x.FieldValueist ein objectVersuch , könnte Gießen zu überprüfen , ob es vom Typ ist 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: Der asBetreiber ist eine Art Safe-Besetzung , die null , wenn der Laufzeittyp des LHS Arguments zurück nicht den statischen Typen von dem RHS Argumente identifiziert entsprechen.

Beantwortet am 03/12/2019 um 00:07
quelle vom benutzer

stimmen
2

Sie müssen nicht LINQ benötigen einen bestimmten Index eines Arrays zuzugreifen.

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

Da die Array - Werte verschiedenen Typen enthält gehe ich davon aus, dass wir eine Reihe von haben object. Deshalb müssen wir auf die erwartete Art zu gießezugangsspezifische Felder oder Eigenschaften der Lage sein.

Falls der Wert null oder der Typ passt nicht asnachgeben null. Die Null-Bedingungsoperator ?.führen einen Teil oder Element - Zugriffsoperation nur dann , wenn ein Operanden nicht leer ist und anderenfalls zurück null.

Wenn Sie nicht über den Index des gewünschten Wertes kennen, können Sie abfragen, mit

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

Wenn Sie sicher , dass der gewünschte Wert sind und nicht null, können Sie die Drop ?.

Beantwortet am 03/12/2019 um 00:11
quelle vom benutzer

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