Pregunta

Uso de linq dinámico ( http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library .aspx ) Ejecuto la siguiente consulta que devuelve un IQueryable. En este resultado, que también es un IEnumerable, puedo ejecutar un Count (), sin embargo, no hay ToList () para obtener los valores. Puedo enumerar sobre ellos usando un foreach pero no puedo acceder a los campos individuales en el tipo anónimo resultante sin reflexión. ¿Es esta la única manera? Gracias

var query =
                db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
                OrderBy("CompanyName").
                Select("New(CompanyName as Name, Phone)");

            foreach (var item in query)
            {
                foreach (var prop in item.GetType().GetProperties())
                {
                    Console.WriteLine(prop);
                }
            }

Se intentó realizar una conversión pero se obtuvo un error No se puede convertir el objeto de tipo 'DynamicClass1' para escribir 'Prueba'.

 foreach (var item in query)
            {
                Console.WriteLine("{0}: {1}", ((Test)item).CompanyName, ((Test)item).Phone);
            }

public class Test {
            public string CompanyName { get; set; }
            public string Phone { get; set; }

}

¿Fue útil?

Solución

No puede esperar que el tipo de su objeto dinámico se resuelva en el momento de la compilación cuando su consulta se resuelve en el tiempo de ejecución. De eso se trata el linq dinámico: le permite ejecutar consultas dinámicas al costo de la verificación en tiempo de compilación.

Tienes que usar la reflexión para acceder a las propiedades de un tipo dinámico, al menos hasta C # 4.

Otros consejos

Si el IEnumerable no es genérico, deberías lanzar en lugar de usar la reflexión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top