Объект возврата 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;
person
Azri Jamil
schedule
01.11.2016