2009-01-14 7 views
0

Je crée manuellement le lambda équivalent:MethodInfo pour EntityCollection au lieu de Queryable

var function = p => p.Child.Any(c => c.Field == "value"); 

J'ai une référence MethodInfo à la méthode « Tout » utilisé avec des expressions construites dans le code.

MethodInfo method = typeof(Queryable).GetMethods() 
     .Where(m => m.Name == "Any" && m.GetParameters().Length == 2) 
     .Single().MakeGenericMethod(typeof(Child)); 

Mes entités sont: Parent 1 --- * Enfant

enfant est une navigation sur la propriété Parent (p dans le lambda ci-dessus). Le type de la propriété est EntityCollection tel que créé par le concepteur.

Je cherchais la bonne façon de faire référence à la méthode Any pour créer cet appel. Marc m'a donné la réponse comment obtenir ceci ici: Calling a Method from an Expression

Mais cela ne fonctionne pas pour le cadre d'entité. EntityCollection n'implémente pas IQueryable, alors comment devrait-on référencer la méthode Any.

Répondre

3

EntityCollection<T> n'implémente pas IQueryable<T> alors il n'est pas surprenant que cela ne fonctionne pas, IMO.

Pourriez-vous donner plus d'explications sur ce que vous essayez de faire? Si vous attendez que la requête soit exécutée sur la base de données, je suppose qu'elle ne va pas supporter cela (étant donné que EntityCollection<T> n'implémente pas IQueryable<T>). Si vous souhaitez que la requête soit exécutée localement, vous devez utiliser Enumerable.Any au lieu de Queryably.Any.

EDIT: Ayant vu la collection mise à jour, je crois que vous voulez juste Enumerable.Any au lieu de Queryable.Any. N'oubliez pas que si cela est fourni en tant qu'arbre d'expression, vous ne serez pas en train d'exécuter le code de toute façon. Vraisemblablement, le cadre comprend Enumerable.Any appliqué à un EntityCollection<T>

+0

Ma réponse était trop grande pour un commentaire, s'il vous plaît voir ma réponse ci-dessous. – blu

+0

Veuillez modifier la question pour la clarifier, plutôt que d'ajouter une "non-réponse". –

+0

J'ai mis à jour la question originale avec des clarifications, merci – blu

0

Vous pouvez convertir EntityCollection en IQueryable à l'aide de la méthode d'extension AsQueryable().

Questions connexes