使用JOIN将Linq转换为Sql到IQueryable select

时间:2010-07-04 17:59:07

标签: linq-to-sql iqueryable service-layer

我有一个名为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)并在我的服务层中进行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

有人可以告诉我使用与此相似的功能返回适当数据的方法是什么

    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

1 个答案:

答案 0 :(得分:0)

嗯,您似乎应该在OpenID和用户之间建立FK关系,但事实并非如此。如果你创建了这种关系,你将能够通过属性轻松遍历它,而不必进行任何查询(除了简单的Where)。