Tuve un problema donde cambié mi fuente de datos de un bindingsource a una consulta de entidad de marco.
var query = dataSource as IQueryable;
var value = query.Where("prop = @0", value).Cast<object>().SingleOrDefault();
Con entidad framework esto arroja una excepción `No se pudo convertir el tipo 'cliente' para escribir 'objeto'. LINQ to Entities solo admite la conversión de primitiva EDM o tipos de enumeración.
La clase donde estaba mi código no tenía una referencia a la lib con el modelo así que ...Cast<customer>
no fue posible.
De todos modos he usado este enfoque
var query = dataSource as IQueryable;
var targetType = query.GetType().GetGenericArguments()[0];
var value = query.Where("prop = @0", value).SingleOrDefault(targetType);
en conjunción con una extensión IEnumerable que utiliza la reflexión
public static object SingleOrDefault(this IEnumerable enumerable, Type type)
{
var method = singleOrDefaultMethod.Value.MakeGenericMethod(new[] { type });
return method.Invoke(null, new[] { enumerable });
}
private static Lazy<MethodInfo> singleOrDefaultMethod
= new Lazy<MethodInfo>(() =>
typeof(Extensions).GetMethod(
"SingleOrDefault", BindingFlags.Static | BindingFlags.NonPublic));
private static T SingleOrDefault<T>(IEnumerable<T> enumerable)
{
return enumerable.SingleOrDefault();
}
dude en implementar el almacenamiento en caché según el tipo para mejorar el rendimiento.
¿Por qué no utiliza el 'IEnumerable' genérico 'así' ImageList' podría derivarse de 'IEnumerable '? –
@Arnis: porque ImageLIst defien en la biblioteca de ImageMagick.net ... :) –