我有以下情况:
1. int[] contentPermissions
2. Dictionary<int, int[]> userPermssions
在上面的#2中,密钥是用户ID,值是用户权限ID的int []。编写lambda函数以返回所有用户ID的好方法,这些用户ID的权限id在contentPermissions中至少匹配1个权限?
更新
这看起来是一个非常好的解决方案吗?:
var userIdsWithPermissions = userPermissions.Where(
x => x.Value.Intersect(contentPermissions).Count() > 1)
.Select(x => x.Key).ToArray();
答案 0 :(得分:1)
您的代码几乎是正确的,但不是“Count()&gt; 1”应该是“Count()&gt; 0”。
var userIdsWithPermissions = from u in userPermssions
where contentPermissions.Any(p => u.Value.Contains(p))
select u;
另一个解决方案可能是:
@PostMapping(value = "${apiVersion.v_1}" + "/parameter-dates")
public ResponseEntity createParameterDate( @RequestBody ParameterDate parameterDate){
// Some code that use parameterDate
}
两者产生相同的输出。相对于22 ms的Intersect解决方案,最后一个仅需4 ms,速度更快。
答案 1 :(得分:0)
您最好的选择是使用Contains()
功能。使用Any()
List<int> contentPermissions = new List<int>();
Dictionary<int, List<int>> userPermssions = new Dictionary<int, List<int>>();
var A = userPermssions.Where(m => m.Value.Any(n => contentPermissions.Contains(n))).Select(m => m.Key).ToList();
答案 2 :(得分:0)
您可以使用此方法:
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;
}