Лямбда-выражение с циклом foreach в C#

 var coupon = " ";

 foreach(var p in products)
 {
     var query = products.Where(b => b.getId() == p.getId()).ToList();

     if (query != null)
     {
         foreach(var q in query)
         {
             coupon = q.getName();
             Console.WriteLine(coupon);
         }
     }
 }

Может ли кто-нибудь сказать мне, каким будет лямбда-выражение этого фрагмента кода?

Ваш вопрос совершенно непонятен. Для какой части этого кода вам нужно выражение? В любом случае, этот вопрос слишком широкий, в частности, потому что вы не предоставили любой собственные средства. Мы здесь не для того, чтобы делать вашу работу.

HimBromBeere 05.09.2018 21:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
3 310
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем блоке кода есть лямбда-выражение, и это единственный аргумент для Where, и он выглядит следующим образом:

b => b.getId() == p.getId()

В данном конкретном случае лямбда - это эффективно (хотя технически это не так), а Предикат, что является причудливым именем для функции, которая проверяет, является ли что-то true или false.

Технически, аргумент, требуемый для .Select, - это Func<Product, bool>, а не Predicate<Product>, как в методах в стиле .NET-2.0, таких как List<>.FindAll(…), однако Func<Product, bool> и Predicate<Product> эквивалентны (одинаковая подпись и тип возврата).

Jeppe Stig Nielsen 05.09.2018 22:53

Хороший замечание, я обновил свой ответ этим разъяснением.

John Cummings 05.09.2018 23:20
Ответ принят как подходящий

Не каждая операция цикла подходит для лямбда-выражения. Лямбда-выражения полезны для прогнозы данных - то есть преобразования их из одной формы в другую - применения формул и т. д., Но: это не то, что вы здесь делаете. Вы делать что-то с данными (Console.WriteLine. Вы мог что-то делаете с LINQ здесь, включая SelectMany, но ... он станет читаемым меньше, не более.

То, что вы уже читали, прекрасно. Единственные изменения, которые я внесу:

  • удалить тест if (query != null) - это никогда не будет ложным
  • удалите ToList() - нет необходимости создавать новый список только для его итерации
  • нет необходимости объявлять coupon до того, как он понадобится
  • Я мог бы поднять p.getId()

Так:

 foreach(var p in products)
 {
     var id = p.getID();
     foreach(var q in products.Where(b => b.getId() == id))
     {
         var coupon = q.getName();
         Console.WriteLine(coupon);
     }
 }

Для каждого продукта p он записывает название купона для всех продуктов q, которые имеют общий идентификатор с p (включая сам p). Интересно, что это за ID. Я согласен с вашим утверждением Не каждая операция цикла подходит для лямбда-выражения. Однако, если бы мы хотели создать IEnumerable<> со всеми этими названиями купонов вместо Console.WriteLine, тогда он мог бы подпадать под категорию прогнозов данных ...

Jeppe Stig Nielsen 05.09.2018 22:47

Другие вопросы по теме