我使用这个 SQL 命令来获取子用户的所有孩子和孩子,但我不知道如何用实体编写它?
WITH ParentUser AS (
SELECT *, 1 AS nthLevel
FROM [OnlinePage].[dbo].[Users] usr1
WHERE ID = @UserID
UNION ALL
SELECT usr2.*,
nthLevel + 1 AS nthLevel
FROM ParentUser pu INNER JOIN
[OnlinePage].[dbo].[Users] usr2 ON pu.ID = usr2.UserParentID
)
SELECT * FROM ParentUser WHERE 1 < nthLevel
我的用户表是:
CREATE TABLE [dbo].[Users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](50) NOT NULL,
[UserParentID] [int] NOT NULL
)
它是这样的:
|--------------------------------------| |ID |用户名 |UserParentID | |-----|-----------|---------| |1 |管理员 |0 | |2 |经销商1 |1 | |3 |用户1 |1 | |4 |经销商2 |2 | |5 |用户2 |4 | |6 |用户3 |5 | |--------------------------------------|
如果我想使用上面的 sql 命令获取 reseler1 的所有子项,我将 @UserID 更改为 2,我的结果是:
|--------------------------------------| |ID |用户名 |UserParentID | |-----|-----------|---------| |2 |经销商1 |1 | |3 |用户1 |1 | |4 |经销商2 |2 | |5 |用户2 |4 | |6 |用户3 |5 | |--------------------------------------|
现在我需要这个sql命令的实体模型,我在谷歌上搜索它,我在stackoverflow(查询子实体)中找到了一些东西,比如下代码,但不能正常工作,只能得到一个级别的孩子:
var query = from m in dbSet.Where(x => x.ID == 1)
join s in dbSet
on m.ID equals s.UserParentID into masterSlaves
from ms in masterSlaves.DefaultIfEmpty()
select ms;