c # Лямбда-выражение, список конвертациик спискуиспользуя Automapper - PullRequest
0 голосов
/ 19 декабря 2018

Я работал над этим большую часть дня и не могу понять, как создать это простое лямбда-выражение:

    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. Я хочу преобразовать активность в UserActivity
  2. Я использую AutoMapper для этого;который прекрасно работает.
  3. Затем я хочу установить для него родительскую ссылку в преобразованном объекте, то есть UserActivities;просто, чтобы я мог использовать доступ к базе данных UserActivities, чтобы обеспечить метод «удаления» для UserActivity.
  4. Затем я хочу вернуть IReadOnlyList.

Вот где я получил:

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

Но это действительно не радует!

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Я пытался быть слишком умным (или, может быть, не совсем так):

    public IReadOnlyList<UserActivity> GetListOfUserActivities()
    {
        List<UserActivity> userActivities = _activityDataAccess.GetActivities().ConvertAll(act => _mapper.Map<UserActivity>(act)).ToList();
        userActivities.ForEach(ua => ua.Parent = this);
        return userActivities;
    }

Но, подумав о посте Джонатана, то есть разобрав проблему дальше, я понял, что вышесказанное сработает, простонужно было разбить его на два утверждения.Спасибо.

0 голосов
/ 19 декабря 2018

Как насчет этого?

activities
    .Select(act =>
    {
        var userActivity = _mapper.Map<UserActivity>(act);
        userActivity.Parent = this;
        return userActivity;
    }).ToList();
0 голосов
/ 19 декабря 2018

Я не совсем понимаю, что вы делаете с this, но не смог:

Создать новый конструктор для UserActivity, который принимает параметр для родителя и входящий Activity object и выполняет сопоставление там:

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

А затем сделайте выборку в лямбде, чтобы преобразовать объекты в список:

var userActivities = activities.Select(i => new UserActivity(i, parentObject)); // parentObject == this?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...