2016-12-01 4 views
-1

1つまたは複数の必須クエリパラメータのみを含む項目のリストを返す方法を検討するのは苦労しています。リストに必要な値が1つ以上含まれているboolを返す方法

私はTrueForAllが機能するかもしれないと考えましたが、そのうちの1つが存在しない場合はfalseを返します。

var hasValidOptions = entity.clientcodes.TrueForAll(x => x.code == "B" 
                 || x.code == "C" 
                 || x.code == "E" 
                 || x.code == "G")) 

ここで私は(私はB、C、EおよびGを有する唯一の心配です)何をしようとしているのいくつかの例です:

  • リスト1:A B E G - >偽を、それが含まれているために
  • リスト2:それはCOなど>真 - B C E G:それはE
  • リスト4を含有するよう>真 - : - EB G>真それはBとG
  • リスト3が含まれているためB、C、E、Gがあります。

どうすればいいですか?

+0

の任意の組み合わせが含まれている場合はtrueを返しますか?あなたのコードはあなたが記述したものとまったく同じです[フィドル参照] –

答えて

6

私はあなたがAllを使用することができると信じて:

list.All(x => x.code == "B" || x.code == "C" || x.code == "E" || x.code == "G"); 

あなたはそれが簡単のようにそれらの配列を使用してオプションを変更することができます:

string[] options = new [] { "B", "C", "E", "G" }; 
list.All(x => options.Contains(x.code)); 
+1

オプションの数がいくつかの要素より多い場合は、配列の代わりにHashSetをContains O(1)対O(n)である。 –

+1

質問のコードとの違いは本当にわかりません。 'All'と' TrueForAll'の両方が全く同じことをするべきではありませんか? –

+0

@ManfredRadlwimmer 'TrueForAll'は、trueを返すためにはすべての条件をtrueにする必要があると思います。リストに値が含まれていない場合はfalseを返しますが、100%ではありません。 – TheLethalCoder

-1

は私のコードを調整し、それが正確に何をして今欲しいです。これが何かコメントを見てよろしくお願いします。

私はこの例を単純化しました。文字列配列は動的に構築されています。

var clientCodes = new List<string> {"A", "B", "C", "E", "G"}; 

var hasValidOptionsOnly = clientCodes.TrueForAll(x=>x.Contains("B") || x.Contains("C") || x.Contains("E") || x.Contains("G")); 

は、今ではリストだけで正確に動作していないどのようなB、C、EまたはG

+1

これはナンセンスです。申し訳ありませんが、そのコードは動作しますが、意味をなさない! '' A ** '**に' 'A ''が含まれているのはなぜですか?あなたの元の試みと@ TheLethalCoderの答えは良い方法です。 –

+0

'x'が多くの文字を含む文字列だった場合、これは意味をなさないでしょう... – ColinM

+0

@ColinM質問とこの答えによれば決してありません。 –

関連する問題