复杂查询不适用于实体框架“; WITH”

时间:2019-08-04 16:28:51

标签: c# .net sql-server

我正在使用Entity Framework进行多级营销应用程序。我已经创建了一个存储过程,但是以某种方式无法显示以下查询-为什么?

;WITH OrgTree ([GenealogyTreeID], [MemberRegisterId], [ParentMemberRegisterId], Level) AS
(
    SELECT 
        [GenealogyTreeID], [MemberRegisterId],
        [ParentMemberRegisterId], 0 AS Level 
    FROM 
        GenealogyTree 
    WHERE 
        ParentMemberRegisterId IS NULL --= 'c9f8479f-2bad-4a70-9c0c-e5c9c6bb1e26'

    UNION ALL

    SELECT 
        g.[GenealogyTreeID], g.[MemberRegisterId],
        g.[ParentMemberRegisterId], OrgTree.Level + 1 
    FROM 
        GenealogyTree g
    JOIN 
        OrgTree ON g.ParentMemberRegisterId = OrgTree.MemberRegisterId
)
SELECT DISTINCT
    g.GenealogyTreeID, g.MemberRegisterId,  
    CASE 
       WHEN g.Level = 0 THEN NULL
       ELSE g.ParentMemberRegisterId 
    END AS ParentMemberRegisterId,  
    g.Level, 
    ISNULL((mmr.FirstName + ' ' + mmr.MiddleName + ' ' + mmr.LastName),
    (mr.FirstName + ' ' + mr.MiddleName + ' ' + mr.LastName)) as ParentFullName,
    (mr.FirstName + ' ' + mr.MiddleName + ' ' + mr.LastName) as SelFullName,
    mr.photo
FROM
    OrgTree g 
INNER JOIN 
    MemberRegister mr on mr.MemberRegisterId = g.MemberRegisterId
INNER JOIN 
    MemberRegister mmr on mmr.MemberRegisterId = g.ParentMemberRegisterId 
WHERE
    mr.FirstName LIKE '%'+ @SearchValue +'%' 
    OR mr.MiddleName LIKE '%'+ @SearchValue +'%' 
    OR mr.LastName LIKE '%'+ @SearchValue +'%'
    OR mmr.FirstName LIKE '%'+ @SearchValue +'%' 
    OR mmr.MiddleName LIKE '%'+ @SearchValue +'%' 
    OR mmr.LastName LIKE '%'+ @SearchValue +'%' 
ORDER BY
    ParentMemberRegisterId
    OFFSET @PageSize * (@PageNo - 1) ROWS
    FETCH NEXT @PageSize ROWS ONLY
    OPTION (RECOMPILE);

1 个答案:

答案 0 :(得分:0)

您应先删除;

WITH OrgTree
  ...
;

否则,ORM将第一个语句作为空语句,而忽略第二个语句。

使用

;WITH模式是因为;在T-SQL中通常不是强制性的,但是有些语句要求使用它,例如CTE / MERGE。这就是为什么一些开发人员从WITH开始;

相关问题