2011-08-31 10 views
13

¿Cuál es la mejor manera de hacer esto donde PROPNAME podría ser una propiedad del tipo T? Edifícalo con reflexión, ¿o hay una buena manera LINQ de hacer esto?propiedad de lista LINQ a matriz?

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

este es el mejor que tengo hasta ahora:

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>(); 
    } 

obtenido un error en la vuelta ... pero cada vez más cerca. Está bien, pero un poco más desordenado de lo que esperaba.

+0

es usted después de una serie de los nombres de propiedad de 'personas'? –

+0

¿Está tratando de hacer una pieza de código reutilizable donde podría especificar cualquier propiedad y recuperar el conjunto de representaciones de cadena? – Tejs

+0

situación es que hay un gran objeto pequeño de muchas propiedades, y una API desea verlas una columna a la vez en lugar de una fila a la vez. – sgtz

Respuesta

23

El uso de un tipo var no explícita, se generará automáticamente el tipo para que

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

Muchas gracias JLevett !!! –

7

se infiere El tipo si se utiliza la palabra clave var:

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

bueno! los nombres serán una matriz de cualquier tipo x.PROPNAME es –

+0

no existe una forma dinámica de cambiar el nombre de un PROPNAME basado en una cadena. Ver la nueva información "prop.GetValue (" que puse allí en una edición reciente. Esa es una respuesta, sin embargo, no es tan eficiente. – sgtz

Cuestiones relacionadas