En utilisant les Expressions Lambda arbres avec IEnumerable

J'ai essayé d'en savoir plus sur l'utilisation de Lamba des arbres d'expression et j'ai donc créé un exemple simple. Voici le code, cela fonctionne en LINQPad si le coller dans un programme C#.

void Main()
{
    IEnumerable<User> list = GetUsers().Where(NameContains("a"));
    list.Dump("Users");
}

//Methods
public IEnumerable<User> GetUsers()
{
    yield return new User{Name = "andrew"};
    yield return new User{Name = "rob"};
    yield return new User{Name = "chris"};
    yield return new User{Name = "ryan"};
}

public Expression<Func<User, bool>> NameContains(string namePart)
{
    return u => u.Name.Contains(namePart);
}

//Classes
public class User
{
    public string Name { get; set; }
}

Cette résultats dans l'erreur suivante:


Le type des arguments de la méthode 'Système.Linq.Énumérable.Où(Système D'.Les Collections.Génériques.IEnumerable, Système.Func)' ne peut pas être déduit à partir de l'utilisation. Essayez de spécifier le type des arguments explicitement.

Cependant si j'ai juste remplacer la première ligne principale avec ceci:

IEnumerable<User> list = GetUsers().Where(u => u.Name.Contains("a"));

Il fonctionne très bien. Pouvez me dire ce que je fais mal, s'il vous plaît?

OriginalL'auteur Loathian | 2010-03-07