来自《C#深度剖析》:
并非所有 Lambda 表达式都可以转换为表达式树。如果 Lambda 包含一个语句块(即使只有一个返回语句),则无法将其转换为表达式树。表达式必须具有仅求值单个表达式的形式。
由于 Linq-to-Object 语句不会被转换为表达式树对象,因此与 Linq-to-Object 操作符一起使用的 Lambda 表达式可以包含一个语句块。
string[] count = { "one ", "two ", "three ", "four ", "five ", "six " };
IEnumerable<int> result = count.Select(item =>
{
Console.WriteLine(item);
return item.Length;
});
foreach (int i in result);
输出:
one two three four five six
我还没有开始学习Linq-To-Sql或Linq-To-Entities,但我认为与操作>的LINQ语句一起使用的lambda表达式只能包含一个表达式,因为只有一个表达式可以转换为表达式树的限制。谢谢。