2011-08-31 11 views
13

Jaki jest najlepszy sposób zrobienia tego, gdy PROPNAME może być dowolną własnością typu T? Zbuduj to za pomocą refleksji, czy istnieje dobry sposób LINQ na robienie tego?Właściwość listy LINQ do tablicy?

T[] vals = people.Select(x => x.PROPNAME).ToArray<T>(); 

jest to najlepszy mam tak daleko:

public T[] ConvertListCol<TFrom,T>(IEnumerable<TFrom> list, string col) 
    { 
     var typ = typeof (TFrom); 
     var props = typ.GetProperties(); 
     var prop = (from p in props where p.Name == col select p).FirstOrDefault(); 
     var ret = from o in list select prop.GetValue(o, null); 
     return ret.ToArray<T>(); 
    } 

masz błąd w zamian ... ale coraz bliżej. Jest w porządku, ale trochę bardziej zawikłane, niż się spodziewałem.

+0

Czy jesteś po tablicy nazw własności "ludzi"? –

+0

Czy próbujesz utworzyć wielokrotnego użytku kawałek kodu, gdzie można określić dowolną właściwość i odzyskać zestaw reprezentacji ciągów? – Tejs

+0

Sytuacja polega na tym, że istnieje duży obiekt poco o wielu właściwościach, a API chciałoby zobaczyć je po jednej kolumnie naraz, a nie po jednym wierszu naraz. – sgtz

Odpowiedz

23

Korzystanie bez wyraźnej typu var, będzie automatycznie generować typ Ci

var names = people.Select(x => x.PROPNAME).ToArray(); 
+0

Dziękuję bardzo JLevett !!! –

7

typu będą wnioskować jeśli używasz słowa kluczowego var:

var names = people.Select(x => x.PROPNAME).ToArray(); 
+0

Dobrze! nazwy będą tablicą dowolnego typu x.PROPNAME jest –

+0

nie ma dynamicznego sposobu zmiany nazwy PROPNAME na podstawie ciągu znaków. Zobacz nowe informacje "prop.GetValue (", które umieściłem tam w ostatniej edycji. To jedna odpowiedź, jednak nie jest tak skuteczna. – sgtz

Powiązane problemy