Vb.net 使用linq检查列表是否同时包含x和y
假设我有一个包含值“x”、“y”和“z”的列表。我想检查它是否包含“x”或(“y”和“z”) 我尝试使用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
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和括号以逻辑方式表述所需的验证;然后在需要的地方替换。