Вложенное лямбда-выражение вместо foreach - PullRequest
0 голосов
/ 06 сентября 2018
class A{
    public B body { get; set; }
}

class B{
    public List<C> positions { get; set; }
}

class C{
    public string NameOfWeek { get; set; }
}

class week{
    public int ID { get; set; }
    public string NameOfWeek { get; set; }
}

class SomeX{
    public List<A> MapWeekID(List<week> weekList, List<A> AList)
        {
            foreach (var a in AList)
            {
                foreach (var position in a.body.positions)
                {
                    position.NameOfWeek = weekList
                        .Where(x => x.NameOfWeek.ToString() == position.NameOfWeek)
                        .Select(y => y.NameOfWeek)
                        .FirstOrDefault();
                }
            }

            return AList;
        }
}

Вот код. Как написать лямбду для вышеприведенного оператора foreach? Я пытаюсь, но не могу найти лучшее решение, так может кто-нибудь?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Ну, вы можете использовать функцию linq SelectMany. Вот модифицированная версия:

foreach(var position in AList.SelectMany(k => k.body.positions)) {
    position.NameOfWeek = weekList
                        .Where(x => x.NameOfWeek.ToString() == position.NameOfWeek)
                        .Select(y => y.NameOfWeek)
                        .FirstOrDefault();
}
0 голосов
/ 06 сентября 2018

Linq и Методы расширения не должны пытаться решить все проблемы. Однако, если вам действительно нужно все в одном утверждении, вы можете использовать это.

AList.SelectMany(x => x.body.positions)
     .ToList()
     .ForEach(
         position => 
            position.NameOfWeek = weekList.Where(x => x.NameOfWeek == position.NameOfWeek)
                                          .Select(y => y.NameOfWeek)
                                          .FirstOrDefault());

Примечание : Если это натолкнулось на мой стол для проверки кода, отправьте его обратно с запиской: «Мои ГЛАЗА !!! Пожалуйста, рефакторинг.

По сути, ваш оригинальный foreach легко читается и поддерживается. Не пытайтесь быть слишком модным, и вы можете легко увидеть, что происходит. Эти качества намного важнее, чем все в одном утверждении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...