Jak używać predykatów w LINQ do Entities dla obiektów Entity Framework
Korzystam z LINQ do Entities dla obiektów Entity Framework w mojej warstwie dostępu do danych.
Moim celem jest filtrowanie jak największej ilości danych z bazy danych, bez stosowania logiki filtrowania do wyników w pamięci.
W tym celu warstwa logiki biznesowej przekazuje predykat do warstwy dostępu do danych.
mam na myśli
Func<MyEntity, bool>
Jeśli więc użyję tego predykatu bezpośrednio, jak
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.Where(x => isMatched(x));
}
Dostaję wyjątek
[System.NotSupportedException] --- {"Typ węzła wyrażenia LINQ„ Invoke ”nie jest obsługiwany w LINQ do jednostek.”}
Rozwiązanie wto pytanie sugeruje użycie metody AsExpandable () zLINQKit biblioteka.
Ale znowu, używając
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}
Dostaję wyjątek
Nie można rzutować obiektu typu „System.Linq.Expressions.FieldExpression” na typ „System.Linq.Expressions.LambdaExpression”
Czy istnieje sposób użycia predykatu w zapytaniu LINQ do Entities dla obiektów Entity Framework, tak że jest poprawnie przekształcany w instrukcję SQL.
Dziękuję Ci.