O objeto de retorno LINQ to SQL estava implementando a IQueryable
interface. Portanto, para o Select
parâmetro predicado do método, você deve fornecer apenas uma expressão lambda sem corpo.
Isso ocorre porque o código LINQ for SQL não é executado dentro do programa e não no lado remoto, como o SQL Server ou outros. Esse tipo de execução de carregamento lento foi conseguido implementando IQueryable onde seu representante esperado está sendo agrupado na classe Tipo de expressão, como abaixo.
Expression<Func<TParam,TResult>>
A árvore de expressão não suporta expressão lambda com body e seu único suporte a expressão lambda de linha única como var id = cols.Select( col => col.id );
Portanto, se você tentar o seguinte código não funcionará.
Expression<Func<int,int>> function = x => {
return x * 2;
}
O seguinte funcionará conforme o esperado.
Expression<Func<int,int>> function = x => x * 2;