Avatar ·

为什么在 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?