Объект возврата LINQ to SQL реализовывал интерфейс IQueryable
.Таким образом, для параметра-предиката Select
необходимо указывать только одно лямбда-выражение без тела.
Это связано с тем, что LINQ для кода SQL не выполняется внутри программы, а не на удаленной стороне, такой как SQL-сервер или другие.Этот тип выполнения отложенной загрузки был достигнут благодаря реализации IQueryable, где его ожидаемый делегат переносится в класс типов Expression, как показано ниже.
Expression<Func<TParam,TResult>>
Дерево выражений не поддерживает лямбда-выражения с телом и поддерживает только однострочное лямбда-выражениекак var id = cols.Select( col => col.id );
Так что, если вы попытаетесь, следующий код не будет работать.
Expression<Func<int,int>> function = x => {
return x * 2;
}
Следующее будет работать в соответствии с ожиданиями.
Expression<Func<int,int>> function = x => x * 2;