小编Woo*_*460的帖子

获取树层次结构的CTE递归

我需要以特定的方式获得树的有序层次结构.有问题的表看起来有点像这样(所有ID字段都是uniqueidentifiers,为了示例,我简化了数据):

EstimateItemID    EstimateID    ParentEstimateItemID     ItemType
--------------    ----------    --------------------     --------
       1              A                NULL              product
       2              A                  1               product
       3              A                  2               service
       4              A                NULL              product
       5              A                  4               product
       6              A                  5               service
       7              A                  1               service
       8              A                  4               product

树形结构的图形视图(*表示"服务"):

           A
       ___/ \___
      /         \
    1            4
   / \          / \
  2   7*       5   8
 /            /
3*           6*

使用此查询,我可以获得层次结构(只是假装'A'是一个唯一标识符,我知道它不在现实生活中):

DECLARE @EstimateID uniqueidentifier
SELECT @EstimateID = 'A'

;WITH temp as(
    SELECT * FROM EstimateItem
    WHERE EstimateID = @EstimateID …
Run Code Online (Sandbox Code Playgroud)

sql-server common-table-expression

45
推荐指数
2
解决办法
7万
查看次数

Regex.Replace行为奇怪

我有一系列字符串,我需要去标记.字符串来自数据库,看起来像这样

Subject: Ticket ##TicketID## Created
ShortText: Ticket ##TicketName## created (ID: ##TicketID##).
LongText: <a href="##BaseUrl##/Ticket/Details/##TicketID##">##TicketName##</a> was created on ##CreatedOn##.
Run Code Online (Sandbox Code Playgroud)

每个标记都是相关事件对象的属性名称,基于某些操作触发.例如,TicketCreatedEvent对象可能看起来像

public class TicketCreatedEvent : ILAMPEvent {
    public Guid TicketID { get; set; }
    public string TicketName { get; set; }
    public DateTime CreatedOn { get; set; }
    public string BaseUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我能够根据对象动态创建字典,将属性名称映射到值,从而找到/解决问题.我还能够在Regex.Replace调用上取得一些进展.替换主题字符串中的标记可以很好地使用:

Regex.Replace(templates.Subject, @"##(.*)##", match => map[match.Groups[1].Value]);
Run Code Online (Sandbox Code Playgroud)

但是,它在ShortText或LongText上的工作效果并不好.从我可以从异常抛出的东西中可以看出,Regex匹配太多了.而不是匹配

##TicketName## 
Run Code Online (Sandbox Code Playgroud)

从字符串,它试图匹配

##TicketName## created (ID: ##TicketID##
Run Code Online (Sandbox Code Playgroud)

显然,我希望单独匹配每个令牌.我认为这是我的错误,但我错过了什么?

c# regex

2
推荐指数
1
解决办法
87
查看次数

标签 统计

c# ×1

common-table-expression ×1

regex ×1

sql-server ×1