Claro; puedes hacer eso de muchas maneras; comenzando con la reflexión (obsérvese que esto es lento, aunque para cantidades moderadas de datos):
var props = objectType.GetProperties();
foreach(object obj in data) {
foreach(var prop in props) {
object value = prop.GetValue(obj, null); // against prop.Name
}
}
Sin embargo; para mayores volúmenes de datos, valdría la pena hacerlo más eficiente; por ejemplo, aquí uso la API Expression
para precompilar un delegado que busca escribe cada propiedad; la ventaja aquí es que no se realiza ninguna reflexión por fila (esto debería ser significativamente más rápido para grandes volúmenes de datos):
static void Main()
{
var data = new[] {
new { Foo = 123, Bar = "abc" },
new { Foo = 456, Bar = "def" },
new { Foo = 789, Bar = "ghi" },
};
string s = Write(data);
}
static Expression StringBuilderAppend(Expression instance, Expression arg)
{
var method = typeof(StringBuilder).GetMethod("Append", new Type[] { arg.Type });
return Expression.Call(instance, method, arg);
}
static string Write<T>(IEnumerable<T> data)
{
var props = typeof(T).GetProperties();
var sb = Expression.Parameter(typeof(StringBuilder));
var obj = Expression.Parameter(typeof(T));
Expression body = sb;
foreach(var prop in props) {
body = StringBuilderAppend(body, Expression.Property(obj, prop));
body = StringBuilderAppend(body, Expression.Constant("="));
body = StringBuilderAppend(body, Expression.Constant(prop.Name));
body = StringBuilderAppend(body, Expression.Constant("; "));
}
body = Expression.Call(body, "AppendLine", Type.EmptyTypes);
var lambda = Expression.Lambda<Func<StringBuilder, T, StringBuilder>>(body, sb, obj);
var func = lambda.Compile();
var result = new StringBuilder();
foreach (T row in data)
{
func(result, row);
}
return result.ToString();
}
gracias por la respuesta, pero tengo duda reagarding propiedades con el acceso de otra clase, como: si tengo '' Lista de las reservas es una clase, y 'Cab'as otra clase y que hacen referencia a él como una propiedad en la clase de reserva. cómo shud analizo a través del 'foreach' para obtener las propiedades de la clase Cab también ... Gracias –
Kulkarni
@sandy ¿qué has probado? –
ryt ahora puedo obtener cada propiedad de la clase 'Booking', como ' foreach (var porp en obj2Insert) { // usando prop.GetValue() para devolver el resultado y almacenarlo. } ' ¡Pero esto atraviesa todas las propiedades de Booking Entity, que no necesito ...! ¡Aquí es donde me golpean ...! – Kulkarni