2016-12-01 44 views
-1

我很努力地找出如何返回只包含一個或多個所需的查詢參數的項目列表。如何返回一個布爾其中列表只包含一個或多個所需的值

我以爲TrueForAll可能會工作,但如果其中一個不存在,那麼它返回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:B G - >正確的,因爲它包含B和G
  • 表3:E - >真,因爲它包含ë
  • 列表4:B C E G - >真,因爲它共ntains B,C,E和G

我該怎麼做?

+0

的任意組合?您的代碼完全按照您所描述的方式執行[請參閱小提琴](https://dotnetfiddle.net/Widget/qjaJF8) –

回答

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,所以如果列表不包含一個值,它將返回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")); 

現在它返回true,如果該列表只包含正好沒有工作什麼B,C,E或G

+1

這是無稽之談。對不起,但該代碼雖然可行,但沒有任何意義!你爲什麼要檢查''A''**是否包含**'「A」'?你最初的嘗試和@TheLethalCoder的答案是更好的。 –

+0

這是有道理的,如果'x'是一個字符串與許多字符... – ColinM

+0

@ColinM根據問題和這個答案它永遠不會。 –

相關問題