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);
}
}
}
Может ли кто-нибудь сказать мне, каким будет лямбда-выражение этого фрагмента кода?





В вашем блоке кода есть лямбда-выражение, и это единственный аргумент для Where, и он выглядит следующим образом:
b => b.getId() == p.getId()
В данном конкретном случае лямбда - это эффективно (хотя технически это не так), а Предикат, что является причудливым именем для функции, которая проверяет, является ли что-то true или false.
Технически, аргумент, требуемый для .Select, - это Func<Product, bool>, а не Predicate<Product>, как в методах в стиле .NET-2.0, таких как List<>.FindAll(…), однако Func<Product, bool> и Predicate<Product> эквивалентны (одинаковая подпись и тип возврата).
Хороший замечание, я обновил свой ответ этим разъяснением.
Не каждая операция цикла подходит для лямбда-выражения. Лямбда-выражения полезны для прогнозы данных - то есть преобразования их из одной формы в другую - применения формул и т. д., Но: это не то, что вы здесь делаете. Вы делать что-то с данными (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, тогда он мог бы подпадать под категорию прогнозов данных ...
Ваш вопрос совершенно непонятен. Для какой части этого кода вам нужно выражение? В любом случае, этот вопрос слишком широкий, в частности, потому что вы не предоставили любой собственные средства. Мы здесь не для того, чтобы делать вашу работу.