2016-12-01 45 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根据问题和这个答案它永远不会。 –

相关问题