2009-06-29 8 views
0

Est-il possible d'utiliser une fonction import dans une clause where dans entity framework? J'ai essayé ce qui suit, mais je reçois une exception plutôt cryptique à laquelle je ne trouve pas d'informations sur:Fonction importée dans Entity Framework Where clause?

var q = MyContext.MyEntities.Where("MyContext.MyFunction(it.ID)") 

(La fonction est de retour une valeur booléenne)

System.Data.EntitySqlException: ' MyContext.MyFunction » ne peut pas être résolu dans un constructeur de type valide ou fonction., près de là où prédicat, ligne 6, colonne 21 ..

Cordialement

Lee

Répondre

1

La requête que vous essayez d'écrire est la composition d'un appel à une FunctionImport avec une requête sur un EntitySet.

Mais parce que FunctionImports sont transposés sur StoredProcedures, qui ne sont pas composables, cela juste ne fonctionnera pas.

Pour quelque chose comme cela fonctionne, théoriquement la fonction devrait être une enveloppe autour de quelque chose comme un composable TVF (tableau Valeur Fonction). Mais malheureusement, les TVF ne sont pas pris en charge dans Entity Framework aujourd'hui.

Alex

+0

Merci Alex - de retour à la planche à dessin pour moi! Dans mon modèle, chaque entité se réfère à une autre entité - A se réfère à B, C & D se réfèrent à E, B & E se réfèrent à F, etc Je veux trouver toutes les entités qui se réfèrent finalement (directement et indirectement) à une autre entité. J'ai un sproc qui peut remonter les références pour trouver si l'entité se réfère finalement à celui que je cherche. Facile dans SQL, dur comme diable dans EF :( Avez-vous des suggestions sur ce que je peux faire? Je pourrais écrire sprocs entité-retour et juste "functionimport" entre eux, mais cela pourrait facilement devenir lourd avec beaucoup de sprocs Lee –

-1

Je ne pense pas que vous voulez passer cette expression comme une chaîne. Vous voulez une expression lambda correcte comme:

MyContext.MyEntities.Where (entity => MyContext.MyFunction (entity.ID));

+0

Merci Jeremy - cependant que la fonction ne retourne pas une entité (juste un booléen) il n'existe pas dans la classe de MyContext (bien que je peux appeler avec succès par l'intermédiaire et EntityClient). –

+0

Eh bien, où cela existe-t-il? Appelez-le simplement du côté droit du => comme vous le feriez d'ailleurs. – jlew

+0

Il n'existe pas en tant que membre de l'objet DataContext généré par l'infrastructure Entity) car il ne s'agit pas d'une fonction de retour d'entité - c'est un retour booléen. –

Questions connexes