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.

questionAnswers(2)

yourAnswerToTheQuestion