C#. Как правильно переписать LINQ запрос?
List<bubbles> bubbles = new List<bubbles>();
bubbles.Add(new bubbles { Title = "red" });
bubbles.Add(new bubbles { Title = "green" });
bubbles.Add(new bubbles { Title = "red green" });
bubbles.Add(new bubbles { Title = "red red" });
bubbles.Add(new bubbles { Title = "red green black" });
bubbles.Add(new bubbles { Title = "123" });
List<string> str = new List<string>() { "green", "123" };
foreach (var r in bubbles.Where(x => str.Contains(x.Title)))
{
Console.WriteLine(r.Title);
}
Есть такой кусок кода, где проверяется что bubbles.Title содержит любое значение из str, но вместо всех строк содержащих "red" и "123" - он выводит только полное совпадение строки(т.е. не "red green black" как задумывалось, а просто "red"), в результате чего выводится лишь два значения, а не 5
Я так понял, что при сравнении двух листов через Contains - он работает немного иначе, чем при поиске конкретного значения в листе? Как можно переписать запрос чтобы он находил все bubbles содержащие 123 или red?
Ответы (1 шт):
Проверил, вроде работает как нужно:
bubbles.Where(x => str.Any(y => x.Title.Contains(y)))
То есть человеческим языком: "Выбрать элементы списка bubbles, у которых в поле Title содержится хотя бы один элемент списка str".
Вывод:
green
red green
red green black
123