Ved hjelp av Linq for å få tilgang til en objekter egenskaper innenfor et annet objekt

stemmer
0

Jeg trenger å få en verdi fra et objekt i et annet objekt. Mitt problem er at jeg får ikke tilgang til noen verdier fra innenfor subobject, jeg får alltid verdien av objektet skriver selv.

Kode hvor jeg tilgang til objektet

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

Dette bringer tilbake i resultatene visning

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

Jeg må ha tilgang til [1] element som inneholder de følgende egenskaper (blant andre), og i behov for å få tilgang til Display

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

ScheduledTask er

{
Fields: {Fields.Field[2]},
LastModifiedDate:null,
{Fields.Field[2]}
}
Publisert på 03/12/2019 klokken 00:03
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Forutsatt x.FieldValueer en objectdu kan prøve å kaste for å sjekke om det er av 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: Den asoperatør er en slags safe-cast som vil returnere null hvis runtime type LHS argument ikke samsvarer med den statiske typen identifisert av RHS argument.

Svarte 03/12/2019 kl. 00:07
kilden bruker

stemmer
2

Du trenger ikke LINQ å få tilgang til en bestemt indeks av en matrise.

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

Siden matrisen inneholder verdier av ulike typer jeg antar at vi har en rekke object. Derfor må vi kaste den forventede typen til å være i stand til å få tilgang til bestemte felt eller eiendommer.

Dersom verdien er null eller typen ikke sams asvil gi null. De null-betinget operatører ?.utfører en del eller element aksesseringsoperasjonen bare hvis en operand er ikke-null, og ellers gå tilbake null.

Hvis du ikke vet indeksen for ønsket verdi, kan du søke med

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

Hvis du er sikker på at den ønskede verdien er der og ikke null, kan du slippe ?.

Svarte 03/12/2019 kl. 00:11
kilden bruker

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