public void Parse_can_translate()
        {
            var results = Enumerable.ToList(
                from p in _db.Patriarchy
                where p.Id == HierarchyId.GetRoot()
                select HierarchyId.Parse(p.Id.ToString()));

            Assert.Equal(
                condense(@"SELECT hierarchyid::Parse([p].[Id].ToString()) FROM [Patriarchy] AS [p] WHERE [p].[Id] = '/'"),
                condense(_db.Sql));

            Assert.Equal(new[] { HierarchyId.Parse("/") }, results);
        }
        public void GetAncestor_3_can_translate()
        {
            var results = Enumerable.ToList(
                from p in _db.Patriarchy
                where p.Id.GetLevel() == 3
                select p.Id.GetAncestor(3));

            Assert.Equal(
                condense(@"SELECT [p].[Id].GetAncestor(3) FROM [Patriarchy] AS [p] WHERE [p].[Id].GetLevel() = CAST(3 AS smallint)"),
                condense(_db.Sql));

            Assert.All(results, h => Assert.Equal(HierarchyId.GetRoot(), h));
        }
        public void HierarchyId_get_ancestor_of_level_is_root()
        {
            var results = Enumerable.ToList(
                from p in _db.Patriarchy
                where p.Id.GetAncestor(p.Id.GetLevel()) == HierarchyId.GetRoot() // HierarchyId.Parse("/1/") // HierarchyId.Parse(p.Id.ToString()).GetAncestor(HierarchyId.Parse(p.Id.ToString()).GetLevel())
                select p.Name);

            Assert.Equal(
                condense(@"SELECT [p].[Name] FROM [Patriarchy] AS [p] WHERE [p].[Id].GetAncestor(CAST([p].[Id].GetLevel() AS int)) = '/'"),
                condense(_db.Sql));

            var all = Enumerable.ToList(
                from p in _db.Patriarchy
                select p.Name);

            Assert.Equal(all, results);
        }