Возвращаемый объект 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;