Asp.net MVC c#更改子记录中的段塞



我有这些记录来自我的存储过程,我在linq调用sql

int_PostTypeId  vcr_PostType    int_PostTypeId_fk   vcr_Slug       HLevel
  49                 c            36                    c             1
  77                 e            49                    c/e           2
  78                 f            77                   c/e/f          3
  79                 g            77                   c/e/g          3

我有这些记录。

假设在编辑int_PostTypeId 49时,我将段塞更改为c1

1)现在子记录中的段塞也应该被更改。

段塞在77中将变成c1/e78段塞段变成c1/e/f79段塞流将变为c1/e/g

2)如果我编辑记录77并将段塞更改为c/e2,则段塞78和79也应更改为c/e2/f和c/e2/g。

因此,编辑记录中的段信息将改变子段信息(如果存在的话)。在linq中做这件事最合适和有效的方法是什么?我用的是递归循环路径,但我觉得效率很低。有什么更一般的方法吗?

如果我理解正确的话,您实际上是在某个地方更新记录中名为vcr_Slug的列,而不是在存储过程中构建该列的值。既然实际使用的是存储过程,为什么不计算列的值呢?我不确定您是否使用递归公共表表达式来选择结果,但如果您是,它可以采取以下形式(对您的表结构进行一些假设,当然可能不完全具有代表性):

CREATE FUNCTION dbo.GetPostTypes(@ParentTypeID int)
RETURNS TABLE
AS RETURN
(
WITH CurrentPostTypes(int_PostTypeId, vcr_PostType, int_PostTypeId_fk, vcr_Slug,
                      HLevel)
AS
(
-- Anchor member definition
    SELECT pt.int_PostTypeId, pt.vcr_PostType, pt.int_PostTypeId_fk,
           pt.vcr_Slug, 1 AS HLevel
    FROM dbo.tblPostTypes AS pt
    WHERE pt.int_PostTypeId = @ParentTypeID
    UNION ALL
-- Recursive member definition
    SELECT pt.int_PostTypeId, pt.vcr_PostType, pt.int_PostTypeId_fk,
           cpt.vcr_Slug + '/' + pt.vcr_Slug AS vcr_Slug, cpt.HLevel + 1 AS HLevel
    FROM dbo.tblPostTypes AS pt
    INNER JOIN CurrentPostTypes AS cpt
        ON pt.int_PostTypeId_fk = cpt.int_PostTypeId
)
SELECT *
FROM CurrentPostTypes
)

您会注意到,在递归成员定义中,vcr_Slug的前一个值加上斜杠和当前记录的列值:cpt.vcr_Slug + '/' + pt.vcr_Slug AS vcr_Slug

相关内容

  • 没有找到相关文章

最新更新