我目前遇到了问题,因为我的操作时间很长!
我的sql中有两个表。
- Users
- Objects
有访问权限,可以使用函数dbo.AccessRight(objId, userId)
计算。
在我的C#代码中,我需要所有带有用户列表的对象。例如:
*Object 1*: Id, Name, AnyPropertie, List<User>
为了实现这一点,我目前正在获取所有对象,迭代它们并添加所有用户,如下所示:
foreach (var o in Objects)
{
o.Users = GetAllUsersWithAccess(o.Id);
}
如何在不循环的情况下实现它?目前,60k物体需要大约5分钟。
编辑1:
GetAllUsersWithAccess代码:
public HashSet<long> GetAllUsersWithAccess(long id)
{
var results = new HashSet<long>(Database.SqlQuery<long>("use database; select Id from dbo.Users where dbo.AccessRight(@p0, Id) > 0;", id));
return result;
}