Eksperymentuję z linq i generics. Na razie zaimplementowałem metodę GetAll, która zwraca wszystkie rekordy danego typu.Linq-to-entity, pytania ogólne i prekompilowane
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();
}
}
}
Działa to dobrze. Następnie chciałbym precompile zapytania:
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();
}
}
}
Tutaj pojawia się następujący:
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."}
Na czym polega problem z tym? Domyślam się, że problem jest z wynikiem wykonania prekompilowanego zapytania, ale nie jestem w stanie przewidzieć dlaczego.
Dlaczego uważasz, że potrzebujesz skompilowanej kwerendy dla tego? Nie potrzebujesz tego. –
Nie związane z błędem; ale jeśli to * działało *, chciałbyś zrobić 'cqGetAll'' pole 'statyczne –
@Jeff Mercado - Nie potrzebuję tego dla tej sprawy, ale planuję rozszerzyć to o bardziej złożone zapytania – loodakrawa