Query_InnerJoin_ByJoin_Test.cs 6.8 KB

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