Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用linq检查列表是否同时包含x和y_Vb.net_Linq - Fatal编程技术网

Vb.net 使用linq检查列表是否同时包含x和y

Vb.net 使用linq检查列表是否同时包含x和y,vb.net,linq,Vb.net,Linq,假设我有一个包含值“x”、“y”和“z”的列表。我想检查它是否包含“x”或(“y”和“z”) 我尝试使用Any扩展方法,但我认为我做得不对 Dim retValue As Boolean = userRoles.Any(Function(a) (a.Name.ToLower() = "x") _ OrElse (a.Name.ToLower() = "y" AndAlso a.Name.ToLower() = "z")) 有人能建议怎么做吗 注意:添加了角色列表。它包含3个值:Gen

假设我有一个包含值“x”、“y”和“z”的列表。我想检查它是否包含“x”或(“y”和“z”)

我尝试使用
Any
扩展方法,但我认为我做得不对

Dim retValue As Boolean = userRoles.Any(Function(a) (a.Name.ToLower() = "x") _ 
    OrElse (a.Name.ToLower() = "y" AndAlso a.Name.ToLower() = "z"))
有人能建议怎么做吗

注意:添加了角色列表。它包含3个值:General、Alien、General、Employee和Internal.External


现在,我需要检查我的列表是否包含(general.alien和internal.external)或general.employee。

这应该可以正常工作:

Dim containsXorelseYandZ As Boolean = userRoles.
    Any(Function(ur) "x".Equals(ur.Name, StringComparison.OrdinalIgnoreCase)) _
    OrElse {"y", "z"}.All(Function(name) userRoles.
    Any(Function(ur) name.Equals(ur.Name, StringComparison.OrdinalIgnoreCase)))

因此,如果该集合不包含“x”,则需要对其进行两次检查。第二次使用的是可枚举的。
string()
上的所有,其中包含必须包含的两个名称。

我想你的意思是,如果列表包含(单独的)项X或Y,以及Z

逻辑上可以描述为
(X_存在或Y_存在)和Z_存在

或采用LINQ风格:

Dim retValue As Boolean = 
   (
    userRoles.Any(Function(a) a.Name.Equals("x", StringComparison.OrdinalIgnoreCase) 
    Or 
    userRoles.Any(Function(a) a.Name.Equals("y", StringComparison.OrdinalIgnoreCase)
   )
   And 
   userRoles.Any(Function(a) a.Name.Equals("z", StringComparison.OrdinalIgnoreCase)

为了清晰起见,我对换行的位置做了一些调整。

如果你想要一行,这会有所帮助

Dim retValue As Boolean =  New String() {"y", "z"}.All(Function(v) userRoles.Contains(v)) OrElse userRoles.Contains("x")

ur.Name
怎么可能同时是“z”和不同的值?这句话不是天生就是假的吗?@Flater:你说得对,天哪!那么只有第二种方法是有意义的。我不想检查我的列表是否包含字母,我需要检查roleList是否包含x角色,如果不包含,那么检查它是否同时包含y和Z逻辑描述将是x_存在或(y_存在和Z_存在)这意味着如果x存在,那么我不想检查z是否存在,但是如果x不存在,y存在,那么检查z是否也存在,根据需要更改括号。我回答的要点是向您展示,您可以使用
.any()
方法替换需要执行的任何检查。您需要验证的标准是业务逻辑的一部分,我这里没有所有的信息。无论哪种方式,只需使用and、or和括号以逻辑方式表述所需的验证;然后在需要的地方替换。