2010-04-07 6 views
2

은 내가 단어에 대한 모든 문장 (예 : .Select(t => t.Split(' '))를 분할 할 IEnumerable<sentence> (문장 = 문자열)를 IEnumerable <string> => 고유 한 문자열 []

의 컬렉션을 가지고 있고,이 후 나는이의 요청에 의한 그룹에 필요 단어를 사용하여 고유 한 단어 목록을 얻습니다.

하십시오

, 도움말

답변

12

첫 번째 추측 :

var uniqueWords = sentences.SelectMany(s => s.Split(' ')).Distinct(); 

그러나, 당신은 아마 문장 부호를 제거 할뿐만 아니라 소문자로 가고 싶어; Split에 더 많은 문자를 전달하고 빈 문자열을 제거하도록 요청한 다음 결과에 ToLowerInvariant을 호출하면됩니다.

입력 된 문장이 SQL의 경우 IEnumerable 대신 IQueryable이되므로 Linq는 수행 할 수있는 작업을 제한하는 쿼리를 데이터베이스에서 실행하려고 시도합니다.

당신에게 BCL, 사용의 모든 기능을 제공 Linq는 메모리에서 실행 만들려면 :

var uniqueWords = sentences.AsEnumerable().SelectMany(s => s.Split(' ')).Distinct(); 

당신은 다음과 같이 진행 할 수 있습니다 AsEnumerable()에 추가 호출이 메모리에 데이터베이스에서 원시 결과를 얻을 수 표준.

+0

테이블 (linq2sql)에 코드를 적용하려고합니다. var uniqueWords = m_DataContext.StoreCategories.SelectMany (s => s.Name.Split ('')) Distinct(); 오류가 있습니다. 메서드 'System.String [] Split (Char [])'에 SQL에 대한 지원되는 변환이 없습니다. – Maxim

+0

내 답변을 업데이트했습니다. 또한 귀하의 질문에 적절하게 태그를 지정하겠습니다. –

+0

이 블로그에 SelectMany가 어떻게 작동하는지에 대한 좋은 개요가 있습니다 (이미지 포함) ... http://www.codethinked.com/post/2010/03/12/A-Visual-Look-At-The-LINQ-SelectMany -Operator.aspx –

관련 문제