¿Cómo unirse con LinQ al conjunto de datos (escrito)?

i recientemente actualicé VS 2005 a 2010 y soy bastante nuevo en LinQ. Quizás alguien pueda ponerme de la manera correcta.

Fond: Tengo un conjunto de datos mecanografiado y tengo el SQLMembershipProvider estándar extendido con una Tabla AccessRule. Por lo tanto, una función puede tener AccessRules infinitamente (por ejemplo, "Administrador" tiene "DeleteCustomer"). Utilizo un proveedor de membresía personalizado que hereda de SqlMemberShipProvider y tiene una función sobrecargada hasAccess (una con un conjunto de datos de memoria como parámetro y la otra usa la base de datos directamente).

Este es el modelo completo:

Ahora necesito saber f.e. si un usuario con ID de usuario ='89f9ea8d-8ae1-460b-a430-aa433261feec' tiene AccessRule "DeleteCustomer".

En SQL sería algo como esto:

SELECT     CASE WHEN aspnet_AccessRule.idAccessRule IS NULL THEN 0 ELSE 1 END AS Access
FROM         aspnet_RoleAccessRule INNER JOIN
                      aspnet_AccessRule ON aspnet_RoleAccessRule.fiAccessRule = aspnet_AccessRule.idAccessRule INNER JOIN
                      aspnet_Roles ON aspnet_RoleAccessRule.fiRole = aspnet_Roles.RoleId INNER JOIN
                      aspnet_UsersInRoles ON aspnet_Roles.RoleId = aspnet_UsersInRoles.RoleId
WHERE (aspnet_UsersInRoles.UserId = @UserID) AND    (aspnet_AccessRule.RuleName =@RuleName) 

En brev:

¿Cómo consigo deaspnet_UsersInRoles aspnet_AccessRule con LinQ?

Gracias de antemano..

Edita:

Aunque C # también es bienvenido, prefiero VB.Net.

Esto es lo que tengo, pero no funciona.

Dim query = From accRule In dsAuth.aspnet_AccessRule _
                        From roleAccRule In dsAuth.aspnet_RoleAccessRule _
                        From role In dsAuth.aspnet_Roles _
                        From userRole In dsAuth.aspnet_UsersInRoles _
                        Where roleAccRule.fiAccessRule = accRule.idAccessRule _
                        And roleAccRule.fiRole = role.RoleId _
                        And userRole.RoleId = role.RoleId _
                        And userRole.UserId = userID And accRule.RuleName = accessRule
            Select accRule.idAccessRule 
Return query.Any

Yo tengo un"Definition of method SelectMany is not accessible in this context" advertencia del compilador y la segundaFrom está resaltado. Supongo que tiene algo que ver con las teclas compuestas en aspnet_RoleAccessRule y aspnet_UsersInRoles. ¿Alguna sugerencia

Esto da la misma excepción en la primera coma:

Dim query = From accRule In dsAuth.aspnet_AccessRule, _
           roleAccRule In dsAuth.aspnet_RoleAccessRule, _
           role In dsAuth.aspnet_Roles, _
           userRole In dsAuth.aspnet_UsersInRoles _
           Where accRule.idAccessRule = roleAccRule.fiAccessRule _
           And roleAccRule.fiRole = role.RoleId _
           And userRole.RoleId = role.RoleId _
           And userRole.UserId = userID And accRule.RuleName = accessRule
     Select accRule.idAccessRule
Return query.Any

Esta es la sintaxis de combinación pero con un error similar Join no es accesible en contexto ...):

Dim userID As Guid = DirectCast(Membership.GetUser.ProviderUserKey, Guid)
        Dim query = From accRule In dsAuth.aspnet_AccessRule _
                       Join roleAccRule In dsAuth.aspnet_RoleAccessRule _
                       On accRule.idAccessRule Equals roleAccRule.fiAccessRule _
                       Join role In dsAuth.aspnet_Roles _
                       On role.RoleId Equals roleAccRule.fiRole _
                       Join userRole In dsAuth.aspnet_UsersInRoles _
                       On userRole.RoleId Equals role.RoleId _
                       Where userRole.UserId = userID And accRule.RuleName = accessRule
                 Select accRule.idAccessRule
        Return query.Any

Solució: Olvidé importar el espacio de nombresSystem.LinQ. Todas estas consultas están funcionando.

Nota lateral: la sintaxis de unión es, con mucho, la consulta más rápida. Echa un vistazo a mi pregunta de seguimiento: ¿Por qué LINQ JOIN es mucho más rápido que vincular con WHERE?

Respuestas a la pregunta(2)

Su respuesta a la pregunta