0

この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;
4

1 に答える 1

0

エンティティ フレームワークと Linq-to-entities は、階層クエリをサポートしていません。dbSet.SqlQuerySQL クエリを使用して、またはで呼び出す必要がありますdbContext.Database.SqlQuery。EF 5 / .NET 4.5 とデータベース ファースト アプローチを使用すると、クエリをラップする SQL 関数を作成してマップすることもできます (そのため、Linq-to-entities クエリからその関数を使用できます)。以前のバージョンで、コードが最初です。

于 2013-01-18T09:28:19.477 に答える