Convertire LINQ to SQL con JOIN per selezionare IQueryable
-
02-10-2019 - |
Domanda
Ho una funzione chiamata GetUserByOpenId
non voglio essere utilizzare questa funzione a tutti
Public Function GetUserByOpenID(ByVal claimedidentifier As String) As User Implements IUserRepository.GetUserByOpenID
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
Return user
End Function
Quello che voglio essere in grado di fare è utilizzare la mia funzione "getusers" (IQueryable) e fare il join nel mio livello di servizio.
Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers
Dim users = (From u In dc.Users
Select u)
Return users.AsQueryable
End Function
Qualcuno può dirmi ciò che il metodo sarà simile per restituire i dati appro-priata utilizzando una funzione simile a questo
Public Function GetAllUsers() As System.Collections.Generic.IList(Of User) Implements IUserService.GetAllUsers
Return _UserRepository.GetUsers().Where(Function(u) (Not u.isClosed)).ToList
End Function
Soluzione
Hmm sembra che si dovrebbe avere un rapporto FK tra OpenIDs e Utenti, ma non è così. Se si crea questo rapporto si sarà in grado di attraversare facilmente tramite proprietà e non hanno a che fare l'interrogazione a tutti (oltre ad un semplice caso).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow