2009-08-21 13 views
2

Kann mir jemand helfen von SQL Query zu LINQ VB.NET zu konvertieren:Linq where-Klausel nicht in select-Anweisung

select rls.* from Roles rls(nolock) 
where rls.id not in (
select r.ID from usersRole ur (nolock) 
inner join Roles r(nolock) on ur.RoleID = r.ID 
where user_id = 'NY1772') 

Dank

Antwort

2

ich meine eigene Antwort zu finden ...

 'construct a where ID list 
    Dim lstRoleIDs = From ur In ctx.UsersRoles _ 
         Join rl In ctx.Roles _ 
         On ur.RoleID Equals rl.ID _ 
         Where ur.User_ID = UserId _ 
         Select rl.ID 

    Dim newQ = (From r In ctx.Roles _ 
       Where Not lstRoleIDs.Contains(_ 
         r.ID) _ 
       Select New UserRoleList With {.ID = r.ID, .PermDesc = r.ID & " - " & r.Permission & " - " & r.PermissionDescription}) 
+0

Herzlichen Glückwunsch. Sie haben herausgefunden, dass eine der besten Möglichkeiten, eine schwierige LINQ-Abfrage durchzuarbeiten, darin besteht, sie in die Komponententeile aufzuteilen und es dem Anbieter zu ermöglichen, den Ausdrucksbaum wieder zusammenzufügen. Sie können es möglicherweise aufrechterhaltbar finden, lstRoleIDs in etwas aussagekräftigeres wie selectedUsersRoleIds zu ändern. –

0

Wenn Sie die (NOLOCK) Hinweise beibehalten möchten, habe ich blogged a handy solution mit Erweiterungsmethoden in C#. Beachten Sie, dass dies dem Hinzufügen von Nolock-Hinweisen zu jeder Tabelle in der Abfrage entspricht.