2012-04-20 10 views
3

Possible Duplicate:
LINQ: Check whether an Array is a subset of anotherchar 배열에 다른 char 배열의 모든 요소가 포함되어 있는지 확인하는 방법은 무엇입니까?

LINQ를 사용하여 하위 집합 배열의 모든 요소가 수퍼 셋에 있는지를 찾는 방법이 있는지 확인하려고합니다.

{'o','k','w','r'} 

이 유효하지 않을 것이지만 :

{'w','o','k','r','d','o'} 

다음은 유효 부분이 될 것이다 :이 상위로 예

{'o','k','w','r','s'} 
{'w','o','k','r','d','o','s'} 

실제 수퍼는 문자 배열하다 나는 기억하고있다. 실제 서브 세트는 데이터베이스 테이블의 값입니다. 이 조건을 충족시키는 테이블에서 모든 값을 가져 오기 위해 EF에 LINQ를 사용하려고합니다. 이것은 내가 지금까지 시도한 것입니다 :

char[] letterArray = letters.ToCharArray(); 
return we.Words.Where(t =>  letterArray.Join(t.Word.ToCharArray(), 
            f => f, 
            s => s, (f, s) => new { s }).Count() == t.Word.Length 
           ).Select(t => t.Word).ToArray(); 

을하지만 이것을 실행할 때 오류를 얻을 :

'Unable to create a constant value of type 'System.Char'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.'

이 오류 주위에 방법이 있나요? 제가 여기서 시도하고있는 것을 더 쉽게 할 수있는 방법이 있습니까?

+0

쿼리로 인해 또는 LINQ to EF로 인해이 오류가 발생합니까? 쿼리하는 기본 데이터 저장소는 무엇입니까? 'ToCharArray()'등을 지원하지 않을 가능성이 높습니다. – mellamokb

+0

단어가 배열에서 오는 경우 코드가 실제로 잘 작동합니다. 문제는 LINQ to EF에 대한 적절한 쿼리로 변환하려는 시도가 ToCharArray()와 같은 것을 처리 할 수 ​​없다는 것입니다. 당신은 전체 단어 목록을 메모리로 가져 와서 거기에서 처리하거나, 필자가 일주일 전에 답변 한이 우연히 비슷한 질문과 같은 더 복잡한 솔루션을 구현해야합니다. http://stackoverflow.com/questions/10096744/puzzle-solving- 찾기 - 모두 - 단어 - - 큰 단어 - 인 - PHP에서/10096985 # 10096985 – mellamokb

답변

1
char[] t1 = {'w','o','k','r','d','o'}; 

char[] t2 = {'o','k','w','r'}; 

bool isSubset = !t2.Except(t1).Any(); 
+0

이것은 이전과 같은 오류가 발생합니다. 훨씬 더 깨끗하지만 ... –

+0

내 편에는 오류가 없습니다. 'isSubset'에서 true를 채 웁니다. –

+0

질문 및 코멘트 섹션을 읽으십시오. –

0

LINQ는 이러한 종류의 작업을 위해 Except 및 Intersect와 같은 확장 기능을 내장하고 있습니다.

char[] superset = { 'w', 'o', 'k', 'r', 'd', 'o' }; 
char[] subset1 = { 'o', 'k', 'w', 'r' }; 
char[] subset2 = { 'w', 'o', 'k', 'r', 'd', 'o', 's' }; 

bool subValid1 = !subset1.Except(superset).Any(); //true 
bool subValid2 = !subset2.Except(superset).Any(); //false 
+0

이것은 이전에 얻은 것과 같은 오류를 던집니다. 그래도 훨씬 깨끗 해 ... –

관련 문제