2010-07-04 2 views
0

я функция называется GetUserByOpenIdЯ не хочу, чтобы использовать эту функцию на всехПреобразовать Linq To Sql с JOIN в IQueryable выбрать

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) и сделать JOIN на моем уровне обслуживания.

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 

ответ

0

Хм, кажется, что вы должны иметь отношения FK между OpenIDs и пользователями, но вы этого не делаете. Если вы создадите это отношение, вы сможете легко пересечь его через свойство и вообще не выполнять запросы (кроме простого Where).

+0

Существует связь между OpenIds и пользователями в DBML-дизайнере (и sql-сервере). –

+0

, тогда у вас должно быть свойство OpenID на объекте User, с которым вы можете легко пройти. В большинстве случаев вам не нужно присоединяться к .NET-коду, потому что отношения между объектами представляются как граф объектов (ссылки на члены). – Stilgar

+0

Yup, это работает с использованием объекта OpenId, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^