【问题标题】:Convert Linq To Sql with JOIN to IQueryable select使用 JOIN 将 Linq 转换为 Sql 到 IQueryable 选择
【发布时间】:2011-03-11 16:16:32
【问题描述】:

我有一个名为 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

【问题讨论】:

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


    【解决方案1】:

    嗯,您似乎应该在 OpenID 和用户之间建立 FK 关系,但您没有。如果您创建此关系,您将能够轻松地通过属性遍历它,而根本不需要进行查询(除了简单的 Where)。

    【讨论】:

    • 在 DBML 设计器(和 sql server)中有 OpenIds 和 Users 之间的关系。
    • 那么您应该在您的 User 对象上有一个 OpenID 属性,您可以轻松地遍历它。在大多数情况下,您不需要在 .NET 代码中进行连接,因为对象之间的关系表示为对象图(成员引用)。
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2014-11-25
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多