Как взять найденный элемент list с помощи linq c#

Очень плохо знаком с linq с#, и посмотрев примеры не нашел такого которого хотел бы я. Вот пример кода:

foreach(string word in listWord
    .Select(text => text.Trim().ToLower())
    .Where(t => setting.worldSerach.All(t2 => t.Contains(t2))))
{
    words[word.Replace('{', '-').Replace('}','-')] = words.TryGetValue(word, out int count) ? count + 1 : 1;
}

Т.е как я понимаю, делаю Where, выбираю слово подходящие под условие. В (List<string>) worldSerach есть слова. Если в тексте есть одно или более из слов, то в (Dictionary<string, int>) words записываю найденное слово + 1. Я хочу записывать не найденное слово, из listWord, а найденное слово из worldSerach. Т.е из List<string> setting.worldSerach

Какие есть варианты? Прошу помощи!

UPD 1.0 Была ошибка в имени : setting.worldSerach в место world - word. И в место listWord - listLine

Я хочу сделать следующие: У меня есть список строк, разных маленьких и больших. Потом есть коллекция, символов, слов или мини приложений, хоть что угодно. На данный момент код выполняет следующие:

  1. Проходиться по массиву.
  2. Находит каждую строку и проверяет с помощи Where - есть ли там слова находящийся в коллекции.
  3. Если есть то записывает в Dictionary[Найденный текст] + 1.

Вот код в консоли:

       Dictionary<string, int> words = new Dictionary<string, int>();
        string[] listText =
        {
            "Привет Мир!",
            "Кто то тут был!",
            "Вопросительный знак?",
            "Еще какой то дополнительный текст"
        };
        List<string> searchWord = new List<string>();
        searchWord.Add("!");
        searchWord.Add("!");

        foreach (string line in listText
            .Where(t => searchWord.All(t2 => t.Contains(t2))))
        {
            words[line.Replace('{', '-').Replace('}', '-')] = words.TryGetValue(line, out int count) ? count + 1 : 1;
        }

        Console.WriteLine("Результат: ");
        foreach (var res in words)
        {
            Console.WriteLine("[{0}] - {1}", res.Key, res.Value);
        }

        Console.ReadKey();

Убрал Select, и переписал немного Where, в место All -> Any. Результат: введите сюда описание изображения

Тут отображаются количество строк в котором есть символы !,?. Но мне нужно взять не количество строк, а количество символов найденных в этих строк.


Ответы (1 шт):

Автор решения: Frehzy
internal class Program
{
    static void Main(string[] args)
    {
        var textList = new List<string>
        {
            "Привет !Ми?р!",
            "Кто то тут был!",
            "Вопросительный знак?",
            "Еще какой то дополнительный текст"
        };
        var searchWordlist = new List<string>
        {
            "!",
            "?"
        };
        
        var result = textList.CountNumberOfCharacters(searchWordlist);

        foreach (var word in result)
            Console.WriteLine($"Word: {word.Item1}. Count: {word.Item2}");
    }
}

internal static class ListExtention
{
    public static IEnumerable<(string, int)> CountNumberOfCharacters(this List<string> list, List<string> searchWordlist)
    {
        foreach (var text in list)
        {
            var count = text.Count(x => searchWordlist.Contains($"{x}"));
            yield return (text, count);
        }
    }
}

Если будет не лень - создайте класс вместо Tuple, в котором создайте 2 свойства - 1 хранит в себе слово, 2 хранит в себе количество вхождений символа

введите сюда описание изображения

→ Ссылка