Skip to content

Commit 4cde2a3

Browse files
2881028810
authored andcommitted
- 增加 ISelect.AsCteTree() 递归查询树表所有子记录;
1 parent dc8f575 commit 4cde2a3

File tree

20 files changed

+395
-33
lines changed

20 files changed

+395
-33
lines changed

FreeSql.DbContext/FreeSql.DbContext.xml

Lines changed: 0 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/Curd/MySqlSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1865,7 +1865,7 @@ public void ToTreeList()
18651865
new VM_District_Child
18661866
{
18671867
Code = "110000",
1868-
Name = "北京市",
1868+
Name = "北京",
18691869
Childs = new List<VM_District_Child>(new[] {
18701870
new VM_District_Child{ Code="110100", Name = "北京市" },
18711871
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1903,6 +1903,28 @@ public void ToTreeList()
19031903
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
19041904
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
19051905
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1906+
1907+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1908+
//Assert.Single(t3);
1909+
//Assert.Equal("100000", t3[0].Code);
1910+
//Assert.Single(t3[0].Childs);
1911+
//Assert.Equal("110000", t3[0].Childs[0].Code);
1912+
//Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1913+
//Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1914+
//Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1915+
1916+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1917+
//Assert.Equal(4, t3.Count);
1918+
//Assert.Equal("100000", t3[0].Code);
1919+
//Assert.Equal("110000", t3[1].Code);
1920+
//Assert.Equal("110100", t3[2].Code);
1921+
//Assert.Equal("110101", t3[3].Code);
1922+
1923+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1924+
//Assert.Equal(3, t3.Count);
1925+
//Assert.Equal("110000", t3[0].Code);
1926+
//Assert.Equal("110100", t3[1].Code);
1927+
//Assert.Equal("110101", t3[2].Code);
19061928
}
19071929

19081930
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/Curd/DamengSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1715,7 +1715,7 @@ public void ToTreeList()
17151715
new VM_District_Child
17161716
{
17171717
Code = "110000",
1718-
Name = "北京市",
1718+
Name = "北京",
17191719
Childs = new List<VM_District_Child>(new[] {
17201720
new VM_District_Child{ Code="110100", Name = "北京市" },
17211721
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1753,6 +1753,28 @@ public void ToTreeList()
17531753
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
17541754
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
17551755
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1756+
1757+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1758+
Assert.Single(t3);
1759+
Assert.Equal("100000", t3[0].Code);
1760+
Assert.Single(t3[0].Childs);
1761+
Assert.Equal("110000", t3[0].Childs[0].Code);
1762+
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1763+
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1764+
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1765+
1766+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1767+
Assert.Equal(4, t3.Count);
1768+
Assert.Equal("100000", t3[0].Code);
1769+
Assert.Equal("110000", t3[1].Code);
1770+
Assert.Equal("110100", t3[2].Code);
1771+
Assert.Equal("110101", t3[3].Code);
1772+
1773+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1774+
Assert.Equal(3, t3.Count);
1775+
Assert.Equal("110000", t3[0].Code);
1776+
Assert.Equal("110100", t3[1].Code);
1777+
Assert.Equal("110101", t3[2].Code);
17561778
}
17571779

17581780
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/Curd/KingbaseESSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1680,7 +1680,7 @@ public void ToTreeList()
16801680
new VM_District_Child
16811681
{
16821682
Code = "110000",
1683-
Name = "北京市",
1683+
Name = "北京",
16841684
Childs = new List<VM_District_Child>(new[] {
16851685
new VM_District_Child{ Code="110100", Name = "北京市" },
16861686
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1718,6 +1718,28 @@ public void ToTreeList()
17181718
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
17191719
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
17201720
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1721+
1722+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1723+
Assert.Single(t3);
1724+
Assert.Equal("100000", t3[0].Code);
1725+
Assert.Single(t3[0].Childs);
1726+
Assert.Equal("110000", t3[0].Childs[0].Code);
1727+
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1728+
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1729+
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1730+
1731+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1732+
Assert.Equal(4, t3.Count);
1733+
Assert.Equal("100000", t3[0].Code);
1734+
Assert.Equal("110000", t3[1].Code);
1735+
Assert.Equal("110100", t3[2].Code);
1736+
Assert.Equal("110101", t3[3].Code);
1737+
1738+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1739+
Assert.Equal(3, t3.Count);
1740+
Assert.Equal("110000", t3[0].Code);
1741+
Assert.Equal("110100", t3[1].Code);
1742+
Assert.Equal("110101", t3[2].Code);
17211743
}
17221744

17231745
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/Curd/MySqlSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1876,7 +1876,7 @@ public void ToTreeList()
18761876
new VM_District_Child
18771877
{
18781878
Code = "110000",
1879-
Name = "北京市",
1879+
Name = "北京",
18801880
Childs = new List<VM_District_Child>(new[] {
18811881
new VM_District_Child{ Code="110100", Name = "北京市" },
18821882
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1914,6 +1914,28 @@ public void ToTreeList()
19141914
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
19151915
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
19161916
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1917+
1918+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1919+
//Assert.Single(t3);
1920+
//Assert.Equal("100000", t3[0].Code);
1921+
//Assert.Single(t3[0].Childs);
1922+
//Assert.Equal("110000", t3[0].Childs[0].Code);
1923+
//Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1924+
//Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1925+
//Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1926+
1927+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1928+
//Assert.Equal(4, t3.Count);
1929+
//Assert.Equal("100000", t3[0].Code);
1930+
//Assert.Equal("110000", t3[1].Code);
1931+
//Assert.Equal("110100", t3[2].Code);
1932+
//Assert.Equal("110101", t3[3].Code);
1933+
1934+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1935+
//Assert.Equal(3, t3.Count);
1936+
//Assert.Equal("110000", t3[0].Code);
1937+
//Assert.Equal("110100", t3[1].Code);
1938+
//Assert.Equal("110101", t3[2].Code);
19171939
}
19181940

19191941
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/Curd/OracleSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1716,7 +1716,7 @@ public void ToTreeList()
17161716
new VM_District_Child
17171717
{
17181718
Code = "110000",
1719-
Name = "北京市",
1719+
Name = "北京",
17201720
Childs = new List<VM_District_Child>(new[] {
17211721
new VM_District_Child{ Code="110100", Name = "北京市" },
17221722
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1754,6 +1754,28 @@ public void ToTreeList()
17541754
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
17551755
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
17561756
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1757+
1758+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1759+
Assert.Single(t3);
1760+
Assert.Equal("100000", t3[0].Code);
1761+
Assert.Single(t3[0].Childs);
1762+
Assert.Equal("110000", t3[0].Childs[0].Code);
1763+
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1764+
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1765+
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1766+
1767+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1768+
Assert.Equal(4, t3.Count);
1769+
Assert.Equal("100000", t3[0].Code);
1770+
Assert.Equal("110000", t3[1].Code);
1771+
Assert.Equal("110100", t3[2].Code);
1772+
Assert.Equal("110101", t3[3].Code);
1773+
1774+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1775+
Assert.Equal(3, t3.Count);
1776+
Assert.Equal("110000", t3[0].Code);
1777+
Assert.Equal("110100", t3[1].Code);
1778+
Assert.Equal("110101", t3[2].Code);
17571779
}
17581780

17591781
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/Curd/PostgreSQLSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,7 @@ public void ToTreeList()
17751775
new VM_District_Child
17761776
{
17771777
Code = "110000",
1778-
Name = "北京市",
1778+
Name = "北京",
17791779
Childs = new List<VM_District_Child>(new[] {
17801780
new VM_District_Child{ Code="110100", Name = "北京市" },
17811781
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1813,6 +1813,28 @@ public void ToTreeList()
18131813
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
18141814
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
18151815
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1816+
1817+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1818+
Assert.Single(t3);
1819+
Assert.Equal("100000", t3[0].Code);
1820+
Assert.Single(t3[0].Childs);
1821+
Assert.Equal("110000", t3[0].Childs[0].Code);
1822+
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1823+
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1824+
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1825+
1826+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1827+
Assert.Equal(4, t3.Count);
1828+
Assert.Equal("100000", t3[0].Code);
1829+
Assert.Equal("110000", t3[1].Code);
1830+
Assert.Equal("110100", t3[2].Code);
1831+
Assert.Equal("110101", t3[3].Code);
1832+
1833+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1834+
Assert.Equal(3, t3.Count);
1835+
Assert.Equal("110000", t3[0].Code);
1836+
Assert.Equal("110100", t3[1].Code);
1837+
Assert.Equal("110101", t3[2].Code);
18161838
}
18171839

18181840
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/Curd/SqlServerSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,7 @@ public void ToTreeList()
16661666
new VM_District_Child
16671667
{
16681668
Code = "110000",
1669-
Name = "北京市",
1669+
Name = "北京",
16701670
Childs = new List<VM_District_Child>(new[] {
16711671
new VM_District_Child{ Code="110100", Name = "北京市" },
16721672
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1704,6 +1704,28 @@ public void ToTreeList()
17041704
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
17051705
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
17061706
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1707+
1708+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1709+
Assert.Single(t3);
1710+
Assert.Equal("100000", t3[0].Code);
1711+
Assert.Single(t3[0].Childs);
1712+
Assert.Equal("110000", t3[0].Childs[0].Code);
1713+
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1714+
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1715+
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1716+
1717+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1718+
Assert.Equal(4, t3.Count);
1719+
Assert.Equal("100000", t3[0].Code);
1720+
Assert.Equal("110000", t3[1].Code);
1721+
Assert.Equal("110100", t3[2].Code);
1722+
Assert.Equal("110101", t3[3].Code);
1723+
1724+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1725+
Assert.Equal(3, t3.Count);
1726+
Assert.Equal("110000", t3[0].Code);
1727+
Assert.Equal("110100", t3[1].Code);
1728+
Assert.Equal("110101", t3[2].Code);
17071729
}
17081730

17091731
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests/Dameng/Curd/DamengSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1716,7 +1716,7 @@ public void ToTreeList()
17161716
new VM_District_Child
17171717
{
17181718
Code = "110000",
1719-
Name = "北京市",
1719+
Name = "北京",
17201720
Childs = new List<VM_District_Child>(new[] {
17211721
new VM_District_Child{ Code="110100", Name = "北京市" },
17221722
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1754,6 +1754,28 @@ public void ToTreeList()
17541754
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
17551755
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
17561756
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1757+
1758+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1759+
Assert.Single(t3);
1760+
Assert.Equal("100000", t3[0].Code);
1761+
Assert.Single(t3[0].Childs);
1762+
Assert.Equal("110000", t3[0].Childs[0].Code);
1763+
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1764+
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1765+
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1766+
1767+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1768+
Assert.Equal(4, t3.Count);
1769+
Assert.Equal("100000", t3[0].Code);
1770+
Assert.Equal("110000", t3[1].Code);
1771+
Assert.Equal("110100", t3[2].Code);
1772+
Assert.Equal("110101", t3[3].Code);
1773+
1774+
t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1775+
Assert.Equal(3, t3.Count);
1776+
Assert.Equal("110000", t3[0].Code);
1777+
Assert.Equal("110100", t3[1].Code);
1778+
Assert.Equal("110101", t3[2].Code);
17571779
}
17581780

17591781
[Table(Name = "D_District")]

FreeSql.Tests/FreeSql.Tests/MySql/Curd/MySqlSelectTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1929,7 +1929,7 @@ public void ToTreeList()
19291929
new VM_District_Child
19301930
{
19311931
Code = "110000",
1932-
Name = "北京市",
1932+
Name = "北京",
19331933
Childs = new List<VM_District_Child>(new[] {
19341934
new VM_District_Child{ Code="110100", Name = "北京市" },
19351935
new VM_District_Child{ Code="110101", Name = "东城区" },
@@ -1967,6 +1967,28 @@ public void ToTreeList()
19671967
Assert.Equal(2, t3[0].Childs[0].Childs.Count);
19681968
Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
19691969
Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1970+
1971+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToTreeList();
1972+
//Assert.Single(t3);
1973+
//Assert.Equal("100000", t3[0].Code);
1974+
//Assert.Single(t3[0].Childs);
1975+
//Assert.Equal("110000", t3[0].Childs[0].Code);
1976+
//Assert.Equal(2, t3[0].Childs[0].Childs.Count);
1977+
//Assert.Equal("110100", t3[0].Childs[0].Childs[0].Code);
1978+
//Assert.Equal("110101", t3[0].Childs[0].Childs[1].Code);
1979+
1980+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "中国").AsCteTree().OrderBy(a => a.Code).ToList();
1981+
//Assert.Equal(4, t3.Count);
1982+
//Assert.Equal("100000", t3[0].Code);
1983+
//Assert.Equal("110000", t3[1].Code);
1984+
//Assert.Equal("110100", t3[2].Code);
1985+
//Assert.Equal("110101", t3[3].Code);
1986+
1987+
//t3 = fsql.Select<VM_District_Child>().Where(a => a.Name == "北京").AsCteTree().OrderBy(a => a.Code).ToList();
1988+
//Assert.Equal(3, t3.Count);
1989+
//Assert.Equal("110000", t3[0].Code);
1990+
//Assert.Equal("110100", t3[1].Code);
1991+
//Assert.Equal("110101", t3[2].Code);
19701992
}
19711993

19721994
[Table(Name = "D_District")]

0 commit comments

Comments
 (0)