Trouver la méthode Any sur un tableau de chaînes

c# expression-trees linq

Question

Donné

string[] stringArray = { "test1", "test2", "test3" };

alors cela retourne vrai:

string[] stringArray = { "test1", "test2", "test3" };

Mon but ultime est d’en faire un arbre d’expression linq. La question est comment puis-je obtenir les informations de méthode de "Any" ? Ce qui suit ne fonctionne pas car il renvoie null.

string[] stringArray = { "test1", "test2", "test3" };

Plus d'explications:

Je crée une fonctionnalité de recherche. J'utilise EF et, jusqu'à présent, l'utilisation d'arbres d'expression linq permet de créer un arbre d'expression lambda dynamique. Dans ce cas, j'ai un tableau de chaînes à partir duquel n'importe quelle chaîne doit apparaître dans un champ de description. L'expression lambda de travail qui entre dans la clause Where est:

string[] stringArray = { "test1", "test2", "test3" };

Donc, pour faire le corps de l'expression lambda, j'ai besoin d'un appel à "Any" .

Code final:

Grâce à la réponse d'I4V, la création de cette partie de l'arbre d'expression ressemble à ceci (et fonctionne):

string[] stringArray = { "test1", "test2", "test3" };

Et puis descriptionExpression entre dans un plus grand arbre d’expression lambda.

Réponse acceptée

Peut-être quelque chose comme ça?

var mi = typeof(Enumerable)
            .GetMethods()
            .Where(m => m.Name == "Any")
            .First(m => m.GetParameters().Count() == 2)
            .MakeGenericMethod(typeof(string));

Et vous pouvez l'invoquer comme:

var mi = typeof(Enumerable)
            .GetMethods()
            .Where(m => m.Name == "Any")
            .First(m => m.GetParameters().Count() == 2)
            .MakeGenericMethod(typeof(string));

Réponse populaire

Vous pouvez aussi faire

// You cannot assign method group to an implicitly-typed local variable,
// but since you know you want to operate on strings, you can fill that in here:
Func<IEnumerable<string>, Func<string,bool>, bool> mi = Enumerable.Any;

mi.Invoke(new string[] { "a", "b" }, (Func<string,bool>)(x=>x=="a"))

Et si vous travaillez avec Linq to Entities, vous voudrez peut-être la surcharge IQueryable:

// You cannot assign method group to an implicitly-typed local variable,
// but since you know you want to operate on strings, you can fill that in here:
Func<IEnumerable<string>, Func<string,bool>, bool> mi = Enumerable.Any;

mi.Invoke(new string[] { "a", "b" }, (Func<string,bool>)(x=>x=="a"))



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi