Linq to sql 将Linq转换为Sql,并将JOIN转换为IQueryable select
我有一个名为Linq to sql 将Linq转换为Sql,并将JOIN转换为IQueryable select,linq-to-sql,iqueryable,service-layer,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 Equ
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
有谁能告诉我使用类似于此的函数返回适当数据的方法是什么样的吗
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
嗯,看起来你应该在OpenID和用户之间建立FK关系,但是你没有。如果创建此关系,您将能够通过属性轻松遍历它,而不必进行任何查询(除了简单的Where之外)。在DBML设计器(和sql server)中,OpenID和用户之间存在关系。然后,您的用户对象上应该有一个OpenID属性,您可以轻松遍历该属性。在大多数情况下,在.NET代码中不需要联接,因为对象之间的关系表示为对象图(成员引用)。