为什么在 C# 中使用 Expression<Func<T>> 而不是 Func<T>?通过示例说明区别
大家好,我开始学习 C# 并遇到了 Expression> 这样的东西。看起来 Func 和 Expression> 在编写 lambda 时似乎一样。但为什么还需要这个 "Expression" 呢?
这里有一个简单的例子。我有一个接受 Func 的方法:
```csharp
public void Filter(Func predicate) {
var numbers = new List {1, 2, 3, 4, 5};
var result = numbers.Where(predicate).ToList();
// 对 result 做一些操作
}
```
我这样调用它:`Filter(x => x > 3);` —— 一切正常。
但我看到在 Entity Framework 中经常使用 Expression>。例如:
```csharp
public IQueryable GetData(Expression> predicate) {
return dbSet.Where(predicate);
}
```
根本区别是什么?为什么不能到处都使用 Func?我理解 Expression 与表达式树有关,但无法理解这在实践中为什么需要。什么时候我应该选择 Expression,而什么时候选择 Func?