C# 将 Lambda 表达式作为方法参数传递

标签 c# linq lambda

我有一个 lambda 表达式,我希望能够传递和重用它。这是代码:

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>();   
  }   

这里的关键是,我希望能够将我在此处使用的 lambda 表达式传递到调用此代码的方法中,以便我可以重用它。 lambda 表达式是我的 .Query 方法中的第二个参数。我假设我想使用 Action 或 Func,但我不太确定它的语法是什么或它是如何工作的。有人可以给我举个例子吗?

最佳答案

使用 Func<T1, T2, TResult> 委托(delegate)作为参数类型并将其传递给您的 Query :

public List<IJob> getJobs(Func<FullTimeJob, Student, FullTimeJob> lambda)
{
  using (SqlConnection connection = new SqlConnection(getConnectionString())) {
    connection.Open();
    return connection.Query<FullTimeJob, Student, FullTimeJob>(sql, 
        lambda,
        splitOn: "user_id",
        param: parameters).ToList<IJob>();   
  }  
}

你会这样调用它:

getJobs((job, student) => {         
        job.Student = student;
        job.StudentId = student.Id;
        return job;
        });

或者将 lambda 赋值给一个变量并传入

关于C# 将 Lambda 表达式作为方法参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297633/

相关文章:

c# - Visual Studio - 已存在具有相同 ID 的测试

c# - yield return 和 LINQ Select 的不同结果

linq - 使用 Entity Framework 进行单元测试

c++ - 在 C++ 中用什么来表示 lambda 字符

c++ - 为什么 lambda 会减慢排序速度

c# - 拆分以逗号分隔的行,注意不要在文本 block 内的逗号上拆分

c# - 预加载实体树

C#构造函数在执行代码后调用构造函数

c# 一对多字符串解析帮助使用正则表达式 lambda

java - 匿名类替换为 lambda 表达式