使用lambda表达式循环遍历并从列表中检查条件

时间:2019-01-10 22:12:03

标签: c# .net linq c#-4.0 foreach

我正在尝试以一种有效的方式编写代码并实现以下目标:

  1. 我在对象中有4个属性,但是我将仅验证两个属性。如果满足ConditionOne,则完全摆脱设置“描述”的循环。如果满足ConditionTwo,则将描述设置到列表中,并继续验证下一个ConditionOne和ConditionTwo,依此类推...

抱歉,我下面的代码与我上面的代码不正确。我需要有关以下方面的指导/帮助

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 :(得分:2)

从执行/结果的角度来看,我不确定以下剪裁是否有意义。

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);

希望这会有所帮助。

答案 1 :(得分:1)

您可以使用break来中断循环。这里没有理由使用任何Lambda表达式。这很简单。添加正确的缩进并使用大括号将使其更容易理解。见下文。

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}
   } 
}
相关问题