Перебрать и проверить условие из списка с помощью лямбда-выражения - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь написать код эффективным способом и добиться следующего:

  1. У меня есть 4 свойства в объекте, но я буду проверять только два свойства. Если Условие выполнено, полностью избавьтесь от настройки цикла Описание. Если Условие выполнено, задайте описание в виде списка и продолжайте проверять следующие Условия и Условие, и так далее ...

Извините, мой код ниже не соответствует тому, что я хочу выше. Мне нужно руководство / помощь по исправлению ниже

public class Input
{
 List<string> Description { get; set;}
}



    IList<Notes> notes = GetNotes (input);


                decimal noteNumber = GetTotalNumber();
                List<string> channel = GetChannels();
                string status =   GetStatus();
                DateTime date = GetDate();

                foreach (var item in notes)
                {
                    if (noteNumber == item.ConditionOne)
                      input.Description = item.Description;
break;
                    if(noteNumber == item.ConditionTwo)
                      input.Description = item.Description 
                    continue with next item in Foreach list of rows
                }

     public class Notes
        {
            [DataMember]
            public string Description{ get; set; }

            [DataMember]
            public string ConditionOne{ get; set; }

            [DataMember]
            public string ConditionTwo{ get; set; }

            [DataMember]
            public string All { get; set; }
    }

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Я не уверен, что приведенный ниже фрагмент имеет смысл с точки зрения выполнения / результата, чего вы пытаетесь достичь.

if(noteNumber == item.ConditionTwo)
                  input.Description = item.Description 
                continue with next item in Foreach list of rows

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

var conditionOneDescription = notes.FirstOrDefault(n => n.ConditionOne == noteNumber);
if(conditionOneDescription!=null)
// set the description 
input.Description = conditionOneDescription.Description
return;

// keep setting the input.Description if the second condition is met    
notes.Where(n => n.ConditionTwo == noteNumber).ToList().ForEach(n => input.Description = n.Description);

Надеюсь, это поможет.

0 голосов
/ 11 января 2019

Вы можете использовать break, чтобы выйти из цикла. Здесь нет причин использовать любые лямбда-выражения. Это довольно просто. Добавление правильных отступов и использование фигурных скобок значительно облегчит понимание. Смотри ниже.

foreach (var item in notes)
{
   if (noteNumber == decimal.Parse(item.ConditionOne, NumberStyles.Currency))
   {
      // condition one - break out of loop
      break;
   } 

   if(noteNumber == item.ConditionTwo)
   {
        // condition two. add description to list
       input.Description.Add(item.Description}
   } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...