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 шт):

Автор решения: CrazyElf

Проверил, вроде работает как нужно:

bubbles.Where(x => str.Any(y => x.Title.Contains(y)))

То есть человеческим языком: "Выбрать элементы списка bubbles, у которых в поле Title содержится хотя бы один элемент списка str".

Вывод:

green
red green
red green black
123
→ Ссылка