Loa*_*ian 9 c# linq tree ienumerable expression
我一直在努力学习更多关于使用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; }
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
无法从用法中推断出方法'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.
但是如果我用main替换main中的第一行:
IEnumerable<User> list = GetUsers().Where(u => u.Name.Contains("a"));
Run Code Online (Sandbox Code Playgroud)
它工作正常.可以告诉我,我做错了吗?
该Enumerable.Where方法需要一个Func<T, bool>,而不是一个Expression<Func<T, bool>>.也许你会混淆Queryable.Where,它确实将表达式作为参数...在你的情况下,你不需要一个表达式,你只需要一个可以对序列中的每个项执行的委托.表达式的目的(大部分)被分析并转换为其他东西(例如SQL),以对外部数据源执行查询
| 归档时间: |
|
| 查看次数: |
13457 次 |
| 最近记录: |