Первое предположение:
var uniqueWords = sentences.SelectMany(s => s.Split(' ')).Distinct();
Однако, вы, вероятно, хотите, чтобы удалить знаки препинания и перейти в нижний регистр, а также; вы можете сделать это, передав больше символов Split и попросив удалить пустые строки, а затем вызвав ToLowerInvariant
на результат.
Если входные предложения получены от SQL, то это будет IQueryable
вместо IEnumerable
, поэтому Linq попытается выполнить запрос в базе данных, что ограничивает то, что вы можете сделать.
Чтобы Linq выполнить в памяти, что дает вам полную мощь BCL, использование:
var uniqueWords = sentences.AsEnumerable().SelectMany(s => s.Split(' ')).Distinct();
Дополнительный вызов AsEnumerable()
получает необработанные результаты из базы данных в памяти, так что вы можете выполнить нормальный.
я пытаюсь применить код таблицы (Linq2Sql) вар uniqueWords = m_DataContext.StoreCategories.SelectMany (s => s.Name.Split (»«)) Distinct(). Но есть ошибка - Method 'System.String [] Split (Char [])' не поддерживает перевод на SQL. – Maxim
Я обновил свой ответ. Также я собираюсь соответствующим образом пометить ваш вопрос. –
На этом блоге хороший обзор (с изображениями) о том, как работает SelectMany ... http://www.codethinked.com/post/2010/03/12/A-Visual-Look-At-The-LINQ-SelectMany -Operator.aspx –