gpt4 book ai didi

c# - 将两个返回 bool 的 LINQ 查询合并为一个返回 bool?

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:50 25 4
gpt4 key购买 nike

我目前在返回 bool? 的方法中有以下两个 LINQ 查询(针对 EF 6.1):

if (db.Permissions.Any(p => p.Key == permission && p.Roles.Any(r => !r.IsAllowed 
&& r.Role.Users.Any(u => u.UserId == userId))))
{
return false;
}
if (db.Permissions.Any(p => p.Key == permission && p.Roles.Any(r => r.IsAllowed
&& r.Role.Users.Any(u => u.UserId == userId))))
{
return true;
}

return null;

首先检查用户是否处于任何 !IsAllowed 角色,如果是则返回 false(=> 用户/角色被拒绝权限,这会否决任何“允许”)。然后它检查用户是否处于任何设置了 IsAllowed 的角色,并在这种情况下返回 true。如果没有为用户的任何角色设置权限,则返回 null
在大多数情况下,这会导致对数据库的两次查询,因为 !IsAllowed 不是经常使用的用户。

有没有办法对直接返回 bool? 的数据库使用一个查询?

最佳答案

您应该可以通过 IsAllowed 进行排序,然后选择第一个。这应该将 false 放在第一位,然后是 true。未经测试,但我想您明白了:

return db.Permissions.Where(p => p.Key == permission)
.SelectMany(p => p.Roles.Where(r => r.Role.Users.Any(u => u.UserId == userId))
.Select(r => r.IsAllowed))
.OrderBy(a => a)
.Select(a => (bool?)a)
.FirstOrDefault();

关于c# - 将两个返回 bool 的 LINQ 查询合并为一个返回 bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24248682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com