この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 | reseler1 | 1 | | 3 | user1 | 1 | | 4 | reseler2 | 2 | | 5 | user2 | 4 | | 6 | user3 | 5 | | -------------------------------------- |
そして、上位のsqlコマンドでreseler1のすべての子を取得したい場合は、@ UserIDを2に変更すると、結果は次のようになります。
| -------------------------------------- | |ID|ユーザー名|UserParentID| | ----- | ----------- | -------------------- | | 2 | reseler1 | 1 | | 3 | user1 | 1 | | 4 | reseler2 | 2 | | 5 | user2 | 4 | | 6 | user3 | 5 | | -------------------------------------- |
今私はこのSQLコマンドのエンティティモデルが必要です、私はグーグルでそれを検索し、ダウンコードのようなstackoverflow(子エンティティのクエリ)で何かを見つけましたが、正しく機能せず、1つのレベルの子しか取得しません:
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;