首页 > 解决方案 > 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;很简单,我可以使用 UserActivity 数据库访问来为 UserActivity 提供“删除”方法。
  4. 然后我想返回一个 IReadOnlyList。

这就是我要去的地方:

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

但是真的不开心!

标签: c#lambda

解决方案


我不太明白你在做什么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?

推荐阅读