2012-04-20 7 views
3

Possible Duplicate:
LINQ: Check whether an Array is a subset of anotherchar配列に別のchar配列のすべての要素が含まれているかどうかを確認する方法は?

私は、サブセット、アレイ内のすべての要素は、スーパーセットの配列である場合を見つけるためにLINQを使用する方法があるかどうかを判断しようとしています。これらは有効ではないだろうが

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

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

実際のスーパーセットは、その文字列であり、例えば、このスーパーセットで:

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

以下は、有効なサブセットであろう私は覚えている。実際のサブセットは、データベーステーブルの値です。私はこの条件を満たすテーブルからすべての値を取得するために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- find-all-words-within-a-larger-word-in-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

これは前と同じエラーが発生します。しかし、もっとクリーナー... –

関連する問題