El objeto de retorno LINQ to SQL estaba implementando la IQueryable
interfaz. Entonces, para el Select
parámetro de predicado de método, solo debe proporcionar una sola expresión lambda sin cuerpo.
Esto se debe a que el código LINQ for SQL no se ejecuta dentro del programa en lugar de en el lado remoto, como el servidor SQL u otros. Este tipo de ejecución de carga diferida se logró mediante la implementación de IQueryable donde su delegado esperado se está envolviendo en la clase de tipo Expresión como se muestra a continuación.
Expression<Func<TParam,TResult>>
El árbol de expresión no admite la expresión lambda con cuerpo y solo admite la expresión lambda de una sola línea como var id = cols.Select( col => col.id );
Entonces, si intentas, el siguiente código no funcionará.
Expression<Func<int,int>> function = x => {
return x * 2;
}
Lo siguiente funcionará según lo esperado.
Expression<Func<int,int>> function = x => x * 2;