i used this SQL Command to get all child and childs of child users and i dont know how can i write it with entities?
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
and my users table is:
CREATE TABLE [dbo].[Users](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Username] [nvarchar](50) NOT NULL,
[UserParentID] [int] NOT NULL
)
it`s something like this:
|--------------------------------------| |ID |Username |UserParentID | |-----|-----------|--------------------| |1 |admin |0 | |2 |reseler1 |1 | |3 |user1 |1 | |4 |reseler2 |2 | |5 |user2 |4 | |6 |user3 |5 | |--------------------------------------|
and if i want to get all childs of reseler1 with upper sql command i change @UserID with 2 and my result is:
|--------------------------------------| |ID |Username |UserParentID | |-----|-----------|--------------------| |2 |reseler1 |1 | |3 |user1 |1 | |4 |reseler2 |2 | |5 |user2 |4 | |6 |user3 |5 | |--------------------------------------|
now i need entity model of this sql command,
i search it on google and i found something in stackoverflow(Querying child entities) like down code, but not work correctly and only get one level of childs:
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;
Entity framework and Linq-to-entities does not support hierarchical queries. You must use your SQL query and call it with
dbSet.SqlQueryordbContext.Database.SqlQuery. With EF 5 / .NET 4.5 and database first approach you would also be able to create SQL function wrapping your query and map it (so you would be able to use that function from Linq-to-entities query) but that is not available in earlier versions and in code first.