c# Lambda 表达式,使用 Automapper 将 list<type1> 转换为 list<type2>

标签 c# lambda

我一天的大部分时间都在研究这个,但不知道如何将其创建为一个简单的 Lambda 表达式:

    public IReadOnlyList<UserActivity> GetListOfUserActivities()
    {
        List<UserActivity> userActivities = new List<UserActivity>();
        List<Activity> activities = _activityDataAccess.GetActivities();
        foreach (var activity in activities)
        {
            UserActivity userActivity = _mapper.Map<UserActivity>(activity);
            userActivity.Parent = this;
            userActivities.Add(userActivity);
        }
        return userActivities;
    }

简而言之:

  1. 我想将 Activity 转换为 UserActivity
  2. 我正在使用 AutoMapper 来执行此操作;效果很好。
  3. 然后我想在转换后的对象中将父引用设置为此,即 UserActivities;很简单,这样我就可以使用 UserActivities 数据库访问权限为 UserActivity 提供“删除”方法。
  4. 然后我想返回一个 IReadOnlyList。

这是我要去的地方:

activities
    .ConvertAll(act => _mapper.Map<UserActivity>(act))
    .Select(uac => uac.Parent = this).ToList();

可是真的不开心啊!

最佳答案

我不太明白你在用 this 做什么,但你不能:

UserActivity 创建一个新的构造函数,该构造函数接受父对象和传入的 Activity 对象的参数,并在其中进行映射:

public UserActivity(Activity activity, Object parent){
    this = _mapper.Map<UserActivity>(activity);
    this.Parent = parent;
}

然后在 lambda 中进行选择以将对象新添加到列表中:

var userActivities = activities.Select(i => new UserActivity(i, parentObject)); // parentObject == this?

关于c# Lambda 表达式,使用 Automapper 将 list<type1> 转换为 list<type2>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53855046/

相关文章:

LINQ:点表示法与查询表达式

c++ - 如何在 stable_timer::async_wait 中用 lambda 替换 std::bind

c# - Winforms 绘画是同步还是异步完成的?

c# - 单元测试项目是否可以加载目标应用程序的 app.config 文件?

c# - 异步任务仍然阻塞 UI 线程

c# - 构建动态表达式树时出现问题

c# - 同时等待多个任务中的一个任务

C# 找不到网络路径

C++11。 Lambdas成员变量捕获,STL列表中的 "this"指针陷阱

java - 比较集合内的集合