如何使用 LINQ 从父子关系 Table 获取数据?
How to get Data from parent child relationship Table using LINQ?
我有类似项目 ==> 版本 ==> 冲刺的模式
01 Project01 Null
02 Version01 01
03 Sprint01 02
04 sprint02 02
05 Version02 01
06 Sprint03 05
07 Sprint04 05
08 Project02 Null
等等....
我想检索所有 SprintsId,所以我只是将 Id(这是 sprint/Version/Project 的主键)传递给服务,根据 Id,如果它是 ProjectId(这里是 01)我想检索所有版本(这里是 02,05),然后找到 SprintsId(03,04,06,07),如果它是 VersionsId(这里是 05)我想要所有 SprintsId(06,07)
我找到了使用 SQL Strored Procedure.using 存储过程的解决方案,它不那么复杂
CREATE PROCEDURE [dbo].[USP_Project]
(
@ID INT
)
AS
BEGIN
DECLARE @PROJECT_LEVEL INT =0
-- IF PROJECT LEVEL IS PROJECT
SELECT @PROJECT_LEVEL=COUNT(ID) FROM PROJECTS WHERE ID=@ID AND PARENTID IS NULL
IF(@PROJECT_LEVEL=1)
BEGIN
SELECT PROJ.id AS PROJECT_ID,PROJ.Title ,VER.ID AS VERSION_ID,VER.Title as [Version], SPRI.ID AS SPRINT_ID,SPRI.Title as [Sprint]
FROM PROJECTS AS PROJ ,PROJECTS AS VER,PROJECTS AS SPRI
WHERE PROJ.ID=@ID AND VER.PARENTID=@ID AND SPRI.PARENTID=VER.ID
END
-- IF PROJECT LEVEL IS VERSION
SELECT @PROJECT_LEVEL= COUNT(VER.ID)
FROM PROJECTS AS PROJ ,PROJECTS AS VER
WHERE VER.PARENTID=PROJ.ID AND PROJ.PARENTID IS NULL AND VER.ID=@ID
IF(@PROJECT_LEVEL>0)
BEGIN
SELECT PROJ.id AS PROJECT_ID,PROJ.Title ,VER.ID AS VERSION_ID,VER.Title as [Version], SPR.ID AS SPRINT_ID,SPR.Title as [Sprint]
FROM PROJECTS AS PROJ ,PROJECTS AS VER ,PROJECTS AS SPR
WHERE VER.ID=@ID AND SPR.PARENTID=@ID AND VER.PARENTID=PROJ.ID
END
-- IF PROJECT LEVEL IS SPRINT
SELECT @PROJECT_LEVEL= COUNT(SPR.ID)
FROM PROJECTS AS PROJ ,PROJECTS AS VER ,PROJECTS AS SPR
WHERE SPR.PARENTID=VER.ID AND VER.PARENTID=PROJ.ID AND PROJ.PARENTID IS NULL AND SPR.ID=@ID
IF(@PROJECT_LEVEL>0)
BEGIN
SELECT PROJ.id AS PROJECT_ID,PROJ.Title ,VER.ID AS VERSION_ID,VER.Title as [Version] , SPR.ID AS SPRINT_ID,SPR.Title as [Sprint]
FROM PROJECTS AS PROJ ,PROJECTS AS VER ,PROJECTS AS SPR
WHERE SPR.ID=@ID AND SPR.PARENTID=VER.ID AND VER.PARENTID=PROJ.ID
END
END
我有类似项目 ==> 版本 ==> 冲刺的模式
01 Project01 Null
02 Version01 01
03 Sprint01 02
04 sprint02 02
05 Version02 01
06 Sprint03 05
07 Sprint04 05
08 Project02 Null
等等....
我想检索所有 SprintsId,所以我只是将 Id(这是 sprint/Version/Project 的主键)传递给服务,根据 Id,如果它是 ProjectId(这里是 01)我想检索所有版本(这里是 02,05),然后找到 SprintsId(03,04,06,07),如果它是 VersionsId(这里是 05)我想要所有 SprintsId(06,07)
我找到了使用 SQL Strored Procedure.using 存储过程的解决方案,它不那么复杂
CREATE PROCEDURE [dbo].[USP_Project]
(
@ID INT
)
AS
BEGIN
DECLARE @PROJECT_LEVEL INT =0
-- IF PROJECT LEVEL IS PROJECT
SELECT @PROJECT_LEVEL=COUNT(ID) FROM PROJECTS WHERE ID=@ID AND PARENTID IS NULL
IF(@PROJECT_LEVEL=1)
BEGIN
SELECT PROJ.id AS PROJECT_ID,PROJ.Title ,VER.ID AS VERSION_ID,VER.Title as [Version], SPRI.ID AS SPRINT_ID,SPRI.Title as [Sprint]
FROM PROJECTS AS PROJ ,PROJECTS AS VER,PROJECTS AS SPRI
WHERE PROJ.ID=@ID AND VER.PARENTID=@ID AND SPRI.PARENTID=VER.ID
END
-- IF PROJECT LEVEL IS VERSION
SELECT @PROJECT_LEVEL= COUNT(VER.ID)
FROM PROJECTS AS PROJ ,PROJECTS AS VER
WHERE VER.PARENTID=PROJ.ID AND PROJ.PARENTID IS NULL AND VER.ID=@ID
IF(@PROJECT_LEVEL>0)
BEGIN
SELECT PROJ.id AS PROJECT_ID,PROJ.Title ,VER.ID AS VERSION_ID,VER.Title as [Version], SPR.ID AS SPRINT_ID,SPR.Title as [Sprint]
FROM PROJECTS AS PROJ ,PROJECTS AS VER ,PROJECTS AS SPR
WHERE VER.ID=@ID AND SPR.PARENTID=@ID AND VER.PARENTID=PROJ.ID
END
-- IF PROJECT LEVEL IS SPRINT
SELECT @PROJECT_LEVEL= COUNT(SPR.ID)
FROM PROJECTS AS PROJ ,PROJECTS AS VER ,PROJECTS AS SPR
WHERE SPR.PARENTID=VER.ID AND VER.PARENTID=PROJ.ID AND PROJ.PARENTID IS NULL AND SPR.ID=@ID
IF(@PROJECT_LEVEL>0)
BEGIN
SELECT PROJ.id AS PROJECT_ID,PROJ.Title ,VER.ID AS VERSION_ID,VER.Title as [Version] , SPR.ID AS SPRINT_ID,SPR.Title as [Sprint]
FROM PROJECTS AS PROJ ,PROJECTS AS VER ,PROJECTS AS SPR
WHERE SPR.ID=@ID AND SPR.PARENTID=VER.ID AND VER.PARENTID=PROJ.ID
END
END