Estoy experimentando con linq y genéricos. Por ahora, acabo de implementar un método GetAll que devuelve todos los registros del tipo dado.Linq-to-entities, Generics and Precompiled Queries
class BaseBL<T> where T : class
{
public IList<T> GetAll()
{
using (TestObjectContext entities = new TestObjectContext(...))
{
var result = from obj in entities.CreateObjectSet<T>() select obj;
return result.ToList();
}
}
}
Esto funciona bien. A continuación, me gustaría precompilar la consulta:
class BaseBL<T> where T : class
{
private readonly Func<ObjectContext, IQueryable<T>> cqGetAll =
CompiledQuery.Compile<ObjectContext, IQueryable<T>>(
(ctx) => from obj in ctx.CreateObjectSet<T>() select obj);
public IList<T> GetAll()
{
using (TestObjectContext entities = new TestObjectContext(...))
{
var result = cqGetAll.Invoke(entities);
return result.ToList();
}
}
}
Aquí, me sale el siguiente:
base {System.Exception} = {"LINQ to Entities does not recognize the method
'System.Data.Objects.ObjectSet`1[admin_model.TestEntity] CreateObjectSet[TestEntity]()'
method, and this method cannot be translated into a store expression."}
¿Cuál es el problema con esto? Supongo que el problema es con el resultado de la ejecución de la consulta precompilada, pero no puedo decir por qué.
¿Por qué crees que necesitas una consulta compilada para eso? No lo necesitas. –
No relacionado con el error; pero si * lo * funcionó, querrá hacer 'cqGetAll' un campo' estático' –
@Jeff Mercado - No lo necesito para este caso, pero planeo expandir esto con consultas más complejas – loodakrawa