Query_InnerJoin_ByJoin_Test.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Vit.Extensions.Vitorm_Extensions;
  3. using System.Data;
  4. namespace Vitorm.MsTest.CommonTest
  5. {
  6. [TestClass]
  7. public class Query_InnerJoin_ByJoin_Test
  8. {
  9. [TestMethod]
  10. public void Test_InnerJoin_Demo()
  11. {
  12. using var dbContext = DataSource.CreateDbContext();
  13. var userQuery = dbContext.Query<User>();
  14. // Linq Expresssion
  15. {
  16. var query =
  17. from user in userQuery
  18. from father in userQuery.Where(father => user.fatherId == father.id)
  19. where user.id > 2
  20. select new { user, father };
  21. var sql = query.ToExecuteString();
  22. var userList = query.ToList();
  23. Assert.AreEqual(1, userList.Count);
  24. Assert.AreEqual(3, userList.First().user.id);
  25. Assert.AreEqual(5, userList.First().father.id);
  26. }
  27. // Lambda Expression
  28. {
  29. var query =
  30. userQuery.SelectMany(
  31. user => userQuery.Where(father => user.fatherId == father.id)
  32. , (user, father) => new { user, father }
  33. )
  34. .Where(row => row.user.id > 2)
  35. .Select(row => new { row.user, row.father });
  36. var sql = query.ToExecuteString();
  37. var userList = query.ToList();
  38. Assert.AreEqual(1, userList.Count);
  39. Assert.AreEqual(3, userList.First().user.id);
  40. Assert.AreEqual(5, userList.First().father.id);
  41. }
  42. }
  43. [TestMethod]
  44. public void Test_InnerJoin_Complex()
  45. {
  46. using var dbContext = DataSource.CreateDbContext();
  47. var userQuery = dbContext.Query<User>();
  48. // Linq Expresssion
  49. {
  50. var query =
  51. from user in userQuery
  52. join father in userQuery on user.fatherId equals father.id
  53. join mother in userQuery on user.motherId equals mother.id
  54. where user.id > 1
  55. orderby father.id descending
  56. select new
  57. {
  58. user,
  59. father,
  60. mother,
  61. testId = user.id + 100,
  62. hasFather = father != null ? true : false
  63. };
  64. query = query.Skip(1).Take(1);
  65. var sql = query.ToExecuteString();
  66. var userList = query.ToList();
  67. Assert.AreEqual(1, userList.Count);
  68. var first = userList.First();
  69. Assert.AreEqual(2, first.user.id);
  70. Assert.AreEqual(4, first.father.id);
  71. Assert.AreEqual(6, first.mother.id);
  72. Assert.AreEqual(102, first.testId);
  73. Assert.AreEqual(true, first.hasFather);
  74. }
  75. // Lambda Expression
  76. {
  77. var query =
  78. userQuery.Join(
  79. userQuery
  80. , user => user.fatherId
  81. , father => father.id
  82. , (user, father) => new { user, father }
  83. ).Join(
  84. userQuery
  85. , row => row.user.motherId
  86. , mother => mother.id
  87. , (row, mother) => new { row, mother }
  88. )
  89. .Where(row2 => row2.row.user.id > 1)
  90. .OrderByDescending(row2 => row2.row.father.id)
  91. .Select(row2 =>
  92. new
  93. {
  94. row2.row.user,
  95. row2.row.father,
  96. row2.mother,
  97. testId = row2.row.user.id + 100,
  98. hasFather = row2.row.father != null ? true : false
  99. }
  100. );
  101. query = query.Skip(1).Take(1);
  102. var sql = query.ToExecuteString();
  103. var userList = query.ToList();
  104. Assert.AreEqual(1, userList.Count);
  105. var first = userList.First();
  106. Assert.AreEqual(2, first.user.id);
  107. Assert.AreEqual(4, first.father.id);
  108. Assert.AreEqual(6, first.mother.id);
  109. Assert.AreEqual(102, first.testId);
  110. Assert.AreEqual(true, first.hasFather);
  111. }
  112. }
  113. [TestMethod]
  114. public void Test_InnerJoin_Others()
  115. {
  116. using var dbContext = DataSource.CreateDbContext();
  117. var userQuery = dbContext.Query<User>();
  118. // simple
  119. {
  120. var query =
  121. userQuery.Join(
  122. userQuery
  123. , user => user.fatherId
  124. , father => father.id
  125. , (user, father) => new { user, father }
  126. );
  127. var sql = query.ToExecuteString();
  128. var userList = query.ToList();
  129. Assert.AreEqual(3, userList.Count);
  130. Assert.AreEqual(1, userList.First().user.id);
  131. }
  132. // where
  133. {
  134. var query =
  135. userQuery.Join(
  136. userQuery
  137. , user => user.fatherId
  138. , father => father.id
  139. , (user, father) => new { user, father }
  140. ).Where(row => row.user.id > 2);
  141. var sql = query.ToExecuteString();
  142. var userList = query.ToList();
  143. Assert.AreEqual(1, userList.Count);
  144. Assert.AreEqual(3, userList.First().user.id);
  145. }
  146. // select
  147. {
  148. var query =
  149. userQuery.Join(
  150. userQuery
  151. , user => user.fatherId
  152. , father => father.id
  153. , (user, father) => new { user, father }
  154. ).Where(row => row.user.id > 2)
  155. .Select(row => new { userId = row.user.id, fatherId = row.father.id });
  156. var sql = query.ToExecuteString();
  157. var userList = query.ToList();
  158. Assert.AreEqual(1, userList.Count);
  159. Assert.AreEqual(3, userList.First().userId);
  160. Assert.AreEqual(5, userList.First().fatherId);
  161. }
  162. // full feature
  163. {
  164. var query =
  165. from user in userQuery
  166. join father in userQuery on user.fatherId equals father.id
  167. where user.id > 1
  168. orderby user.id descending
  169. select new { user, father };
  170. query = query.Skip(1).Take(1);
  171. var sql = query.ToExecuteString();
  172. var userList = query.ToList();
  173. Assert.AreEqual(1, userList.Count);
  174. Assert.AreEqual(2, userList.First().user.id);
  175. }
  176. }
  177. }
  178. }