Comment faire pour utiliser des prédicats dans LINQ to entities pour Entity Framework objets

Je suis en utilisant LINQ to entities pour Entity Framework objets dans ma Couche d'Accès aux Données.

Mon but est de filtrer autant que je peux à partir de la base de données, sans appliquer une logique de filtrage en mémoire les résultats.

Pour que le but de la Couche Logique Métier passe par un prédicat à la Couche d'Accès aux Données.

Je veux dire

Func<MyEntity, bool>

Donc, si j'utilise ce prédicat directement, comme

public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
    return qry = _Context.MyEntities.Where(x => isMatched(x));
}

Je suis l'exception

[Système.NotSupportedException] --- {"L'expression LINQ type de nœud
'Appeler' n'est pas pris en charge dans LINQ to entities."}

Solution dans question suggère d'utiliser des AsExpandable() la méthode de LINQKit bibliothèque.

Mais encore une fois, à l'aide de

public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
    return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}

Je suis l'exception

Impossible de convertir l'objet de type
'Système.Linq.Les Expressions.FieldExpression' de type
'Système.Linq.Les Expressions.LambdaExpression'

Est-il moyen d'utiliser le prédicat dans la requête LINQ to entities pour Entity Framework objets, de sorte qu'il est correctement transformé en une instruction SQL.

Merci.

  • Je ne veux pas interférer, mais les exposer IQueryable et l'expression des paramètres est généralement considéré comme une mauvaise idée. Il est préférable d'ajouter de la spécification des paramètres pour GetAllMatchedEntities (comme int minimumAge) et de construire la requête à l'intérieur de la méthode.
InformationsquelleAutor bairog | 2013-10-27