C# 对于这种情况,如何使用linq返回另一组整数中的所有整数?

C# 对于这种情况,如何使用linq返回另一组整数中的所有整数?,c#,.net,C#,.net,我有以下情况: 1. int[] contentPermissions 2. Dictionary<int, int[]> userPermssions 您最好使用Contains函数。使用任何 您可以使用以下方法: public int[] GetUserIDArrayByPermission(int permission) { var dicUserPermission=userPermssions.Where(i => i.Value.Contains(permis

我有以下情况:

1. int[] contentPermissions
2. Dictionary<int, int[]> userPermssions

您最好使用Contains函数。使用任何


您可以使用以下方法:

public int[] GetUserIDArrayByPermission(int permission)
{
  var dicUserPermission=userPermssions.Where(i => i.Value.Contains(permission));
 int[] userIDArray=dicUserPermission.Select(p => p.Key).ToArray();
 return userIDArray;
} 
更新:

public int[] GetUserIDArrayByContentPermissions()
{            
  var dicUserPermission = userPermssions.Where(i => i.Value.Count(p=>contentPermissions.Contains(p))>0).ToList();
  int[] userIDArray = dicUserPermission.Select(p => p.Key).ToArray();
  return userIDArray;
} 

您的代码几乎正确,但不是Count>1,而是Count>0

var userIdsWithPermissions = userPermssions.Where(
                    x => x.Value.Intersect(contentPermissions).Count() > 0)
                    .Select(x => x.Key).ToArray();
另一个解决办法是:

var userIdsWithPermissions = from u in userPermssions
                             where contentPermissions.Any(p => u.Value.Contains(p))
                             select u;

两者产量相同。最后一个更快,只需要4毫秒,而Intersect解决方案需要22毫秒。

您可以告诉我们它是否正常工作,如果不正常,又如何解释它没有正常工作。您的答案比我的答案更有意义。对我来说,这是一个很重要的时刻。为什么这次被否决了?我有确切的解决办法,但我不知道为什么。您使用管道,因此可能会出现性能问题。然而,您的代码完成了这项工作。我的回答也被否决了。我将向上投票,因为就我所知,它是正确的。OP要求返回所有用户ID的代码,这些用户ID的权限ID至少与contentPermissions中的1个权限匹配。此代码返回所有用户ID,其中一个权限作为参数提供。“这不是我们要问的。”德洛普卡特,是的,是我的错,写了新的方法
var userIdsWithPermissions = userPermssions.Where(
                    x => x.Value.Intersect(contentPermissions).Count() > 0)
                    .Select(x => x.Key).ToArray();
var userIdsWithPermissions = from u in userPermssions
                             where contentPermissions.Any(p => u.Value.Contains(p))
                             select u;