تحويل LINQ إلى SQL مع Join to Iqueryable Select
-
02-10-2019 - |
سؤال
لدي وظيفة تسمى GetUserByOpenId
لا أريد أن أستخدم هذه الوظيفة على الإطلاق
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
ما أريد حقًا أن أكون قادرًا على القيام به هو استخدام وظيفة "getUsers" الخاصة بي (iqueryable) والقيام بالانضمام إلى طبقة الخدمة الخاصة بي.
Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers
Dim users = (From u In dc.Users
Select u)
Return users.AsQueryable
End Function
هل يمكن لأي شخص أن يخبرني كيف ستبدو الطريقة لإرجاع بيانات Appropraite باستخدام وظيفة مماثلة لهذا
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
المحلول
حسنًا ، يبدو أنك يجب أن يكون لديك علاقة FK بين OpenIDs والمستخدمين ولكنك لا تفعل ذلك. إذا قمت بإنشاء هذه العلاقة ، فستتمكن من اجتيازها بسهولة عبر الممتلكات وليس عليك إجراء الاستعلام على الإطلاق (إلى جانب مكان بسيط).
لا تنتمي إلى StackOverflow