2010-06-24 16 views
0

J'utilise .NET 4 et je me demande simplement s'il existe un moyen optimisé d'obtenir ce qui suit.ASP.NET Linq pour les sélections SQL et imbriquées

Public Function GetUserByOpenID(ByVal claimedidentifier As String) As User Implements IUserRepository.GetUserByOpenID 
     Dim user = (From u In dc.Users 
        Where u.ID = (From o In dc.OpenIDs 
            Where o.ClaimedIdentifier = claimedidentifier 
            Select o.UserID).FirstOrDefault 
        Select u) 
     Return user 
    End Function 

Répondre

1

En supposant que tous les utilisateurs ont un ID correspondant dans OpenIDs:

Dim user = (From u in dc.Users 
      Join o in dc.OpenIDs On u.ID Equals o.UserId 
      Where o.ClaimedIdentifier = claimedidentifier 
      Select u).FirstOrDefault() 
+0

Oui tous les utilisateurs ont un ID correspondant dans OpenIDs ... merci. –

+0

Tout ce que j'avais à ajouter à votre exemple était '.FirstOrDefault' afin que je puisse récupérer un seul enregistrement. Merci pour l'aide. –

+0

@rockinthesixstring - Ajouté à l'exemple. Content que ça a marché. –

0
Dim user = dc.OpenIDs 
    .Where(o => o.ClaimedIdentifier == claimedidentifier) 
    .Select(o => o.User) 

Je suis partielle lambdas, moi-même ...

+0

Je suis avec vous ... mais cet exemple est VB.NET. Pas de Lambda pour eux. –