Query_InnerJoin_BySelectMany_Test.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. using System.Data;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. namespace Vitorm.MsTest.CommonTest
  4. {
  5. [TestClass]
  6. public class Query_InnerJoin_BySelectMany_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 sql = query.ToExecuteString();
  21. var userList = query.ToList();
  22. Assert.AreEqual(1, userList.Count);
  23. Assert.AreEqual(3, userList.First().user.id);
  24. Assert.AreEqual(5, userList.First().father.id);
  25. }
  26. // Lambda Expression
  27. {
  28. var query =
  29. userQuery.SelectMany(
  30. user => userQuery.Where(father => user.fatherId == father.id)
  31. , (user, father) => new { user, father }
  32. )
  33. .Where(row => row.user.id > 2)
  34. .Select(row => new { row.user, row.father });
  35. var sql = query.ToExecuteString();
  36. var userList = query.ToList();
  37. Assert.AreEqual(1, userList.Count);
  38. Assert.AreEqual(3, userList.First().user.id);
  39. Assert.AreEqual(5, userList.First().father.id);
  40. }
  41. }
  42. [TestMethod]
  43. public void Test_InnerJoin_Complex()
  44. {
  45. using var dbContext = DataSource.CreateDbContext();
  46. var userQuery = dbContext.Query<User>();
  47. // Linq Expression
  48. {
  49. var query =
  50. from user in userQuery
  51. from father in userQuery.Where(father => user.fatherId == father.id)
  52. from mother in userQuery.Where(mother => user.motherId == mother.id)
  53. where user.id > 1
  54. orderby father.id descending
  55. select new
  56. {
  57. user,
  58. father,
  59. mother,
  60. testId = user.id + 100,
  61. hasFather = father != null ? true : false
  62. };
  63. query = query.Skip(1).Take(1);
  64. var sql = query.ToExecuteString();
  65. var userList = query.ToList();
  66. Assert.AreEqual(1, userList.Count);
  67. var first = userList.First();
  68. Assert.AreEqual(2, first.user.id);
  69. Assert.AreEqual(4, first.father.id);
  70. Assert.AreEqual(6, first.mother.id);
  71. Assert.AreEqual(102, first.testId);
  72. Assert.AreEqual(true, first.hasFather);
  73. }
  74. // Lambda Expression
  75. {
  76. var query =
  77. userQuery.SelectMany(
  78. user => userQuery.Where(father => user.fatherId == father.id)
  79. , (user, father) => new { user, father }
  80. ).SelectMany(
  81. row => userQuery.Where(mother => row.user.motherId == mother.id)
  82. , (row, mother) => new { row, mother }
  83. )
  84. .Where(row2 => row2.row.user.id > 1)
  85. .OrderByDescending(row2 => row2.row.father.id)
  86. .Select(row2 =>
  87. new
  88. {
  89. row2.row.user,
  90. row2.row.father,
  91. row2.mother,
  92. testId = row2.row.user.id + 100,
  93. hasFather = row2.row.father != null ? true : false
  94. }
  95. );
  96. query = query.Skip(1).Take(1);
  97. var sql = query.ToExecuteString();
  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_MultipleSelect()
  110. {
  111. using var dbContext = DataSource.CreateDbContext();
  112. var userQuery = dbContext.Query<User>();
  113. {
  114. var query = from user in userQuery
  115. from father in userQuery.Where(father => user.fatherId == father.id)
  116. from mother in userQuery.Where(mother => user.motherId == mother.id)
  117. orderby user.id
  118. select new
  119. {
  120. uniqueId = user.id + "_" + father.id + "_" + mother.id,
  121. uniqueId1 = user.id + "_" + user.fatherId + "_" + user.motherId,
  122. user,
  123. user2 = user,
  124. user3 = user,
  125. father,
  126. hasFather = user.fatherId != null ? true : false,
  127. fatherName = father.name,
  128. mother
  129. };
  130. var userList = query.ToList();
  131. Assert.AreEqual(3, userList.Count);
  132. Assert.AreEqual(1, userList.First().user.id);
  133. Assert.AreEqual(3, userList.Last().user.id);
  134. Assert.AreEqual(5, userList.Last().father?.id);
  135. }
  136. {
  137. var query = from user in userQuery
  138. from father in userQuery.Where(father => user.fatherId == father.id)
  139. from mother in userQuery.Where(mother => user.motherId == mother.id)
  140. where user.id > 1
  141. orderby user.id
  142. select new
  143. {
  144. user,
  145. father,
  146. userId = user.id + 100,
  147. hasFather = user.fatherId != null ? true : false,
  148. hasFather2 = father != null,
  149. fatherName = father.name,
  150. motherName = mother.name,
  151. };
  152. var sql = query.ToExecuteString();
  153. var userList = query.ToList();
  154. Assert.AreEqual(2, userList.Count);
  155. Assert.AreEqual(4, userList.First().father?.id);
  156. Assert.AreEqual(5, userList.Last().father?.id);
  157. }
  158. }
  159. }
  160. }