linq 返回一个筛选的项目列表,其中ID位于另一个匹配guid数组的列表中

zbdgwd5y  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(179)

在得到一些帮助后,使用另一个项目列表过滤列表。通常我会在SQL中编写代码,但我需要尝试在. NET中使用它。我有一个角色列表,每个角色都有一组权限,每个用户也是一组角色的成员,这将是过滤器。我试图让我的头周围的各种帮助文件,但没有一个例子,在这种格式,我可以找到。

  1. Partial Class TestUsers
  2. Inherits System.Web.UI.Page
  3. Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
  4. Roles.Role = New List(Of Role)
  5. Roles.Role.Add(New Role(New Guid("EAC49E8F-BF55-44FD-BE69-5BBF7B5F289A"), "Admin", 0))
  6. Roles.Role.Add(New Role(New Guid("A174A3ED-17F8-4450-9B25-3D2A21FCDDFF"), "User", 0))
  7. Roles.Role.Add(New Role(New Guid("5780C40C-111A-4B4D-AA20-80E944B6B67A"), "Anon", 0))
  8. Roles.Role.Add(New Role(New Guid("7E1DC89C-4B9C-49F8-9A37-0FA22A7C8116"), "HR", 0))
  9. Dim UserPermission As New List(Of Role)
  10. UserPermission.Add(Roles.GetRoleByID(New Guid("EAC49E8F-BF55-44FD-BE69-5BBF7B5F289A")))
  11. UserPermission.Add(Roles.GetRoleByID(New Guid("A174A3ED-17F8-4450-9B25-3D2A21FCDDFF")))
  12. Dim PagePermission = RolePermission.GetPermissionFromString("Admin:1,1,1;User:1,0,0;Data:1,0,0;")
  13. Dim FilteredList = PagePermission.Where(Function(i) UserPermission.Contains(i.Role)).ToList
  14. Response.Write(FilteredList(0).Role.RoleName)
  15. Response.Write(UserPermission.Count())
  16. Response.Write("<br>")
  17. Response.Write(PagePermission.Count())
  18. Response.Write("<br>")
  19. Response.Write(FilteredList.Count())
  20. End Sub
  21. Public Class RolePermission
  22. Public Role As Role
  23. Public Read As Boolean
  24. Public Edit As Boolean
  25. Public Admin As Boolean
  26. Public Sub New(Role As Role, Read As String, Edit As String, Admin As String)
  27. Me.Role = Role
  28. Me.Read = Read
  29. Me.Edit = Edit
  30. Me.Admin = Admin
  31. End Sub
  32. Public Shared Function GetPermissionFromString(Permission As String) As List(Of RolePermission)
  33. Dim u As New List(Of RolePermission)
  34. If Permission = "" Then Permission = "Anon:0,0,0;"
  35. Dim l As String() = Permission.TrimEnd(";").Split(";")
  36. For Each s In l
  37. If Not IsNothing(s.Split(":")) Then
  38. 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)))
  39. End If
  40. Next
  41. Return u
  42. End Function
  43. End Class
  44. Public Class Role
  45. Public RoleID As Guid
  46. Public RoleName As String
  47. Public SiteGroupID As Integer
  48. Public Sub New(RoleID As Guid, RoleName As String, SiteGroupID As Integer)
  49. Me.RoleID = RoleID
  50. Me.RoleName = RoleName
  51. Me.SiteGroupID = SiteGroupID
  52. End Sub
  53. End Class
  54. Public Class Roles
  55. Public Shared Role As List(Of Role)
  56. Public Shared Function GetRoleByID(RoleID As Guid) As Role
  57. Return Role.Find(Function(s) s.RoleID = RoleID)
  58. End Function
  59. Public Shared Function GetRoleByName(RoleName As String) As Role
  60. Return Role.Find(Function(s) s.RoleName = RoleName)
  61. End Function
  62. End Class
  63. End Class

字符串
过滤列表返回3,应该是2。

  1. Dim FilteredList = PagePermission.Where(Function(i) UserPermission.Contains(i.Role)).ToListResponse.Write(FilteredList(0).Role.RoleName)

bgibtngc

bgibtngc1#

RolePermission.GetPermissionFromString()中有一个bug。在你得到DbStr(Permission.Split(":")(0))的地方,它应该是DbStr(s.Split(":")(0))

相关问题