У меня есть лямбда-выражение, которое я хотел бы передавать и использовать повторно. Вот код:
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>();
}
Ключевым моментом здесь является то, что я хочу иметь возможность передавать лямбда-выражение, которое я использую здесь, в метод, вызывающий этот код, чтобы я мог повторно использовать его. Лямбда-выражение - второй аргумент внутри моего метода .Query. Я предполагаю, что хочу использовать Action или Func, но я не совсем уверен, каков синтаксис для этого и как он работает. Кто-нибудь может привести мне пример?
Ответы:
Используйте
Func<T1, T2, TResult>
делегат в качестве типа параметра и передайте его в свойQuery
:Вы бы назвали это:
Или назначьте лямбду переменной и передайте ее .
источник
Если я понимаю, вам нужен следующий код. (передача выражения лямбда по параметру) Метод
Метод вызова
Вы можете сделать то же самое в их классе, см. Это пример.
Метод вызова
Я надеюсь это будет полезно
источник
Compile()
в.Where
? Я видел, как это работает и без этого.Лямбда-выражения имеют тип
Action<parameters>
(в случае, если они не возвращают значение) илиFunc<parameters,return>
(в случае, если они имеют возвращаемое значение). В вашем случае у вас есть два входных параметра, и вам нужно вернуть значение, поэтому вы должны использовать:источник
Вы должны использовать тип делегата и указать его в качестве параметра команды. Вы можете использовать один из встроенных типов делегатов -
Action
иFunc
.В вашем случае похоже, что ваш делегат принимает два параметра и возвращает результат, поэтому вы можете использовать
Func
:Затем вы можете вызвать свой
GetJobs
метод, передав экземпляр делегата. Это может быть метод, соответствующий этой сигнатуре, анонимный делегат или лямбда-выражение.PS Вы должны использовать PascalCase для имен методов -
GetJobs
неgetJobs
.источник