【发布时间】:2010-03-07 20:41:18
【问题描述】:
我一直在尝试了解有关使用 Lamba 表达式树的更多信息,因此我创建了一个简单的示例。这是代码,如果粘贴为 C# 程序,这在 LINQPad 中有效。
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; }
}
这会导致以下错误:
无法从用法中推断方法“System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable, System.Func)”的类型参数。尝试明确指定类型参数。
但是,如果我只是将 main 中的第一行替换为:
IEnumerable<User> list = GetUsers().Where(u => u.Name.Contains("a"));
它工作正常。请告诉我我做错了什么?
【问题讨论】:
标签: c# linq tree ienumerable expression