提问人:Gavin Clayton 提问时间:11/16/2023 更新时间:11/16/2023 访问量:29
从另一个匹配 guid 数组的列表中返回 ID 所在的项目筛选列表
Returning a filtered list of items from where the ID is in a list from another array of matching guids
问:
经过一些帮助,使用另一个项目列表过滤列表。通常我会在 SQL 中对此进行编码,但我需要尝试在 .NET 中使其正常工作。 我有一个角色列表,每个角色在每页的基础上都有一组权限,用户也是一组角色的成员,这些角色就是过滤器。我试图了解各种帮助文件,但没有一个有我能找到的这种格式的示例。
Partial Class TestUsers
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Roles.Role = New List(Of Role)
Roles.Role.Add(New Role(New Guid("EAC49E8F-BF55-44FD-BE69-5BBF7B5F289A"), "Admin", 0))
Roles.Role.Add(New Role(New Guid("A174A3ED-17F8-4450-9B25-3D2A21FCDDFF"), "User", 0))
Roles.Role.Add(New Role(New Guid("5780C40C-111A-4B4D-AA20-80E944B6B67A"), "Anon", 0))
Roles.Role.Add(New Role(New Guid("7E1DC89C-4B9C-49F8-9A37-0FA22A7C8116"), "HR", 0))
Dim UserPermission As New List(Of Role)
UserPermission.Add(Roles.GetRoleByID(New Guid("EAC49E8F-BF55-44FD-BE69-5BBF7B5F289A")))
UserPermission.Add(Roles.GetRoleByID(New Guid("A174A3ED-17F8-4450-9B25-3D2A21FCDDFF")))
Dim PagePermission = RolePermission.GetPermissionFromString("Admin:1,1,1;User:1,0,0;Data:1,0,0;")
Dim FilteredList = PagePermission.Where(Function(i) UserPermission.Contains(i.Role)).ToList
Response.Write(FilteredList(0).Role.RoleName)
Response.Write(UserPermission.Count())
Response.Write("<br>")
Response.Write(PagePermission.Count())
Response.Write("<br>")
Response.Write(FilteredList.Count())
End Sub
Public Class RolePermission
Public Role As Role
Public Read As Boolean
Public Edit As Boolean
Public Admin As Boolean
Public Sub New(Role As Role, Read As String, Edit As String, Admin As String)
Me.Role = Role
Me.Read = Read
Me.Edit = Edit
Me.Admin = Admin
End Sub
Public Shared Function GetPermissionFromString(Permission As String) As List(Of RolePermission)
Dim u As New List(Of RolePermission)
If Permission = "" Then Permission = "Anon:0,0,0;"
Dim l As String() = Permission.TrimEnd(";").Split(";")
For Each s In l
If Not IsNothing(s.Split(":")) Then
u.Add(New RolePermission(Roles.GetRoleByName(DbStr(Permission.Split(":")(0))), s.Split(":")(1).Split(",")(0), s.Split(":")(1).Split(",")(1), s.Split(":")(1).Split(",")(2)))
End If
Next
Return u
End Function
End Class
Public Class Role
Public RoleID As Guid
Public RoleName As String
Public SiteGroupID As Integer
Public Sub New(RoleID As Guid, RoleName As String, SiteGroupID As Integer)
Me.RoleID = RoleID
Me.RoleName = RoleName
Me.SiteGroupID = SiteGroupID
End Sub
End Class
Public Class Roles
Public Shared Role As List(Of Role)
Public Shared Function GetRoleByID(RoleID As Guid) As Role
Return Role.Find(Function(s) s.RoleID = RoleID)
End Function
Public Shared Function GetRoleByName(RoleName As String) As Role
Return Role.Find(Function(s) s.RoleName = RoleName)
End Function
End Class
End Class
过滤后的列表返回 3,它应该是 2。
Dim FilteredList = PagePermission.Where(Function(i) UserPermission.Contains(i.Role)).ToListResponse.Write(FilteredList(0).Role.RoleName)
答:
1赞
Darryl
11/16/2023
#1
中有一个错误。你在哪里,它应该是.RolePermission.GetPermissionFromString()
DbStr(Permission.Split(":")(0))
DbStr(s.Split(":")(0))
评论
0赞
Gavin Clayton
11/16/2023
干杯达里尔,有时只需要第二只眼睛就能发现这些东西!
0赞
jmcilhinney
11/16/2023
@GavinClayton,这似乎是调试时应该捡到的东西。许多初学者不知道如何调试,甚至不知道这是他们需要做的事情。如果是你,你应该停止你正在做的事情,现在学习如何调试。单步执行该代码并检查每个引用会显示这不是您期望的值。
评论
FilteredList.Count()
GetRoleByName("Data")
PagePermission.Count()
UserPermission.Contains(null)