c#Lambda表达式,转换列表<;类型1>;列出<;类型2>;使用自动映射器

c#Lambda表达式,转换列表<;类型1>;列出<;类型2>;使用自动映射器,c#,lambda,C#,Lambda,我一天大部分时间都在研究这个问题,不知道如何将其创建为一个简单的Lambda表达式: public IReadOnlyList<UserActivity> GetListOfUserActivities() { List<UserActivity> userActivities = new List<UserActivity>(); List<Activity> activities = _activ

我一天大部分时间都在研究这个问题,不知道如何将其创建为一个简单的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;
    }
public-IReadOnlyList-GetListOfUserActivities()
{
List userActivities=new List();
列出活动=_activityDataAccess.GetActivities();
foreach(活动中的var活动)
{
UserActivity UserActivity=\u mapper.Map(活动);
userActivity.Parent=this;
添加(userActivity);
}
返回用户活动;
}
简言之:

  • 我想将活动转换为用户活动
  • 我用AutoMapper来做这件事;这很好用
  • 然后,我想将转换对象中的父引用设置为该引用,即UserActivities;这样我就可以使用UserActivities数据库访问为UserActivity提供一个“delete”方法
  • 然后我想返回一个IReadOnlyList
  • 这就是我要做的:

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

    但它真的不快乐

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

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

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

    我试图表现得太聪明(或者可能不是这样):

    public-IReadOnlyList-GetListOfUserActivities()
    {
    List userActivities=\u activityDataAccess.GetActivities().ConvertAll(act=>\u mapper.Map(act)).ToList();
    userActivities.ForEach(ua=>ua.Parent=this);
    返回用户活动;
    }
    
    但是考虑到Johnathan的帖子,即进一步分解问题,我意识到上面的方法是可行的,只需要将其分解为两种说法。谢谢。

    这个怎么样

    activities
        .Select(act =>
        {
            var userActivity = _mapper.Map<UserActivity>(act);
            userActivity.Parent = this;
            return userActivity;
        }).ToList();
    
    活动
    .选择(act=>
    {
    var userActivity=_mapper.Map(act);
    userActivity.Parent=this;
    返回用户活动;
    }).ToList();
    
    “它真的不开心”不是一个有效的问题陈述。您能更具体地说明您遇到的错误(如果有)或困难吗?返回(IReadOnlyList)activities.ConvertAll(act=>_mapper.Map(act))。选择(uac=>uac.Parent=this.ToList();可疑的类型转换或强制转换。看看我在你问题顶部链接的重复帖子。这不是类型转换,Automapper工作得很完美。我只是想用一种工作的lambda方法来完成我在for each中所做的事情。你的原始代码不能翻译成lambda表达式,无论如何也不能直接翻译。你在比较apple我接受这个答案,因为这让我想到了下面的解决方案,如何阅读下面的内容。
        public IReadOnlyList<UserActivity> GetListOfUserActivities()
        {
            List<UserActivity> userActivities = _activityDataAccess.GetActivities().ConvertAll(act => _mapper.Map<UserActivity>(act)).ToList();
            userActivities.ForEach(ua => ua.Parent = this);
            return userActivities;
        }
    
    activities
        .Select(act =>
        {
            var userActivity = _mapper.Map<UserActivity>(act);
            userActivity.Parent = this;
            return userActivity;
        }).ToList();