Tengo una expresión lambda que me gustaría poder transmitir y reutilizar. Aquí está el código:
public List<IJob> getJobs(/* i want to pass the lambda expr in here */) {
using (SqlConnection connection = new SqlConnection(getConnectionString())) {
connection.Open();
return connection.Query<FullTimeJob, Student, FullTimeJob>(sql,
(job, student) => {
job.Student = student;
job.StudentId = student.Id;
return job;
},
splitOn: "user_id",
param: parameters).ToList<IJob>();
}
La clave aquí es que quiero poder pasar la expresión lambda que estoy usando aquí al método que llama a este código, para poder reutilizarlo. La expresión lambda es el segundo argumento dentro de mi método .Query. Supongo que querría usar una acción o una función, pero no estoy muy seguro de cuál es la sintaxis para esto o cómo funciona. ¿Alguien puede darme un ejemplo?
Respuestas:
Utilice un
Func<T1, T2, TResult>
delegado como tipo de parámetro y páselo a suQuery
:Lo llamarías:
O asignar el lambda a una variable y pasar a lo en.
fuente
Si entiendo, necesita el siguiente código. (pasando expresión lambda por parámetro) El método
Método de llamada
Puedes hacer lo mismo en su clase, mira este ejemplo.
Método de llamada
Espero que esto sea útil
fuente
Compile()
el.Where
? También he visto que funciona sin eso.Las expresiones lambda tienen un tipo de
Action<parameters>
(en caso de que no devuelvan un valor) oFunc<parameters,return>
(en caso de que tengan un valor de retorno). En su caso, tiene dos parámetros de entrada y necesita devolver un valor, por lo que debe usar:fuente
Debe usar un tipo de delegado y especificarlo como parámetro de comando. Puede usar uno de los tipos de delegado integrados,
Action
yFunc
.En su caso, parece que su delegado toma dos parámetros y devuelve un resultado, por lo que podría usar
Func
:Entonces podrías llamar a tu
GetJobs
método pasando una instancia delegada. Este podría ser un método que coincida con esa firma, un delegado anónimo o una expresión lambda.PD: Debería utilizar PascalCase para los nombres de métodos
GetJobs
, nogetJobs
.fuente