как написать эквивалентный код LINQ to objects для этого кода

#c# #.net #linq

#c# #.net #linq

Вопрос:

Как мы можем написать LINQ эквивалентный код этого кода:

 foreach (Function objFunc in _objCFLFile.CFLFunctionsList)
{
     if (objFunc.Name == txtFunctionName.Text)
     {
          ShowMessage(Constants.M10036);
          return false;
     }
}
  

спасибо, ребята, я пометил ваши ответы как 1
Если я хочу добавить еще одно условие, подобное этому

 foreach (Function objFunc in _objCFLFile.CFLFunctionsList)
            {
                if (objFunc.Name == txtFunctionName.Text amp;amp; objFunc.Signature == OtherFunction.Signature)
                {
                    ShowMessage(Constants.M10046);//function already exists
                    return false;
                }
            }
  

в этом случае также существуют различные синтаксисы LINQ, но какой из них будет идеальным, эффективным?

Комментарии:

1. Все ответы эквивалентны, за исключением Алиостада. Вы можете добавить дополнительное условие, просто добавив amp;amp; и т.д. К лямбда-выражению, переданному в Any()

Ответ №1:

 if (_objCFLFile.CFLFunctionsList.Any(f => f.Name == txtFunctionName.Text))
{
  ShowMessage(Constants.M10036);
  return false;
}
  

С вашим дополнительным требованием:

 if (_objCFLFile.CFLFunctionsList.Any(f => f.Name == txtFunctionName.Text amp;amp;
                                     f.Signature == OtherFunction.Signature))
{
  ShowMessage(Constants.M10036);
  return false;
}
  

Если вам нужно добавить еще много условий, возможно, стоит создать метод для сравнения.

Ответ №2:

Использование Any():

 if (_objCFLFile.CFLFunctionsList.Any(objFunc => 
                  objFunc.Name == txtFunctionName.Text))            
            {
                ShowMessage(Constants.M10036);                     
                return false; 
            }