LINQ If .Any匹配.Any

时间:2010-05-11 14:50:37

标签: c# linq

我有2个字符串数组,如果_authRole数组中存在任何数组,我想返回。怎么做的?

 string[] _userRoles = userdata.Split(',');

 string[] _authRoles = AuthRoles.Split(',');


 bool isAuthorized = _authRoles.Any(_userRoles ??);

/ M

3 个答案:

答案 0 :(得分:11)

如果您想要确定_authRoles_userRoles是否至少有一个共同项目,请使用:

bool isAuthorized = _authRoles.Intersect(_userRoles).Any();

您还可以以您选择的任何其他方式查询Intersect的结果。

答案 1 :(得分:7)

试试这个:

Boolean isAuthorized =
    _userRoles.Any(user => _authRoles.Contains(user));

答案 2 :(得分:4)

假设列表的大小为N和M,并且可能的情况不匹配。安德鲁的解决方案是时间为O(NM),额外内存为O(1)。 Adam的解决方案是时间和记忆中的O(N + M),但可以更清楚地写成Jon的解决方案。

另一个与Adam和Jon基本相同的解决方案是加入两个列表:

var joined = from user in userRoles 
             join auth in authRoles 
             on user equals auth 
             select user;
return joined.Any();

这比重量要重一点,但它读得很好。 : - )