sql >> Databáze >  >> RDS >> Sqlserver

Existuje praktický způsob, jak použít datový typ hierarchieID v rámci entity 4?

Zdá se, že dostávám zhlédnutí, ale žádné odpovědi. Měl jsem nějakou okamžitou potřebu pracovat se strukturou hierarchie nad SQL, takže jsem sestavil statickou pomocnou třídu. Nepovažuji to za úplné řešení, ale zatím to funguje relativně dobře. PadPath je zde skutečně kritickou funkcí.

public static class SQLHierarchyManipulatin {
    const int   DEFAULT_PAD_LEN     = 3;
    const char  DEFAULT_PAD_CHAR    = '0';

    public static string PadPath(string Hierarchy) {
        return PadPath (Hierarchy, DEFAULT_PAD_LEN);
    }       
    public static string PadPath(string Hierarchy, int padLen) {
        string[]    components  = Hierarchy.Split('/');

        for (var i = 0; i < components.Length; i++ ) {
            if (components[i] != "") {
                components[i] = components[i].PadLeft(padLen, DEFAULT_PAD_CHAR);
            }
        }
        return string.Join("/", components);
    }

    public static int CurrentNodeIndex(string Hierarchy) {
        string[]    components  = Hierarchy.Split('/');
        string      startItem   = components[components.Length - 2]; //one slot back from trailing slash

        return int.Parse(startItem);
    }

    public static string ParentPath (string Hierarchy) {
        return  Hierarchy.Substring(0, Hierarchy.TrimEnd('/').LastIndexOf('/') + 1);
    }

    public static string AppendChildWithPadding (string Hierarchy, int childIndex, int padLen) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChildWithPadding (string Hierarchy, int childIndex) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChild (string Hierarchy, int childIndex) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChild (string Hierarchy, int childIndex, int padLen) {
        return Hierarchy + childIndex.ToString().PadLeft(padLen, DEFAULT_PAD_CHAR) + "/";
    }
}

Doufám, že to někomu pomůže! I když bych rád slyšel od lidí.




  1. SQLite IN

  2. 2 způsoby, jak zkontrolovat úroveň kompatibility v Oracle (SQLcl &SQL*Plus)

  3. Samospravující tabulky oddílů PostgreSQL

  4. SQLAlchemy více cizích klíčů v jedné mapované třídě na stejný primární klíč