20. juli 2014 - 08:53Der er
8 kommentarer og 1 løsning
Reflection - hent værdier fra nested class/properties
Hejsa
Jeg prøver at finde frem til en metode hvorpå jeg kan laven en list.orderby(x => x.parameter)
orderby skal kunne angives som en string, det virker fint med denne metode
PropertyInfo pi = typeof(person).GetProperty(propertyName); personSorted = persons.OrderBy(x => pi.GetValue(x,null)).ToList();
men det virker KUN på properties som er på første level i en class, det jeg så mangler er at kunne få adgang til properties fra den nested classes som f.eks, nedenstående class hvor person indeholder klassen adresseInfo - så hvordan får jeg fat i de properties, så de kan bruges i min orderby - det skal være reflection da jeg skal kunne angive orderby som udfra en string variabel i databasen.
public class person { public person() { addressInfo = new address(); }
public string firstname { get; set; } public string lastname { get; set; }
public address addressInfo; }
public class address { public string city { get; set; } public int postalcode { get; set; } }
namespace E { public class Person { public string FirstName { get; set; } public string LastName { get; set; } public Address Address { get; set; } }
public class Address { public string City { get; set; } public int ZipCode { get; set; } } public class Program { public static void Main(string[] args) { Person o = new Person { FirstName = "Oscar", LastName = "Mayer", Address = new Address { City = "Somewhere", ZipCode = 1234 } }; PropertyInfo pi1 = typeof(Person).GetProperty("Address"); PropertyInfo pi2 = typeof(Address).GetProperty("City"); String city = (string)pi2.GetValue(pi1.GetValue(o, null), null); Console.WriteLine(city); Console.ReadKey(); } } }
Tak for eksempel - det virker fint, men løser ikke helt mit problem - jeg har en list af type Person
Denne vil jeg så sortere ved hjælp orderby funktionen på list - Person.OrderBy(x => pi1.GetValue(x, null)).ToList()
men problemet er at jeg ikke kan angive pi2 da den stammer fra en anden type, så hvordan kan jeg angive i orderby at den skal via pi1 hvis man kan sige det sådan i teorien hedder den jo 'Person.Address' det går fint med properties tilhørende direkte på person klassen
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.