Query_Group_Test.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using System.Data;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. namespace Vitorm.MsTest.CommonTest
  4. {
  5. [TestClass]
  6. public class Query_Group_Test
  7. {
  8. [TestMethod]
  9. public void Test_Group_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. group user by new { user.fatherId, user.motherId } into userGroup
  18. select new { userGroup.Key.fatherId, userGroup.Key.motherId };
  19. var sql = query.ToExecuteString();
  20. var rows = query.ToList();
  21. Assert.AreEqual(3, rows.Count);
  22. Assert.AreEqual(0, rows.Select(u => u.fatherId).Except(new int?[] { 4, 5, null }).Count());
  23. Assert.AreEqual(0, rows.Select(u => u.motherId).Except(new int?[] { 6, null }).Count());
  24. }
  25. // Lambda Expression
  26. {
  27. var query =
  28. userQuery
  29. .GroupBy(user => new { user.fatherId, user.motherId })
  30. .Select(userGroup => new
  31. {
  32. userGroup.Key.fatherId,
  33. userGroup.Key.motherId
  34. })
  35. ;
  36. var sql = query.ToExecuteString();
  37. var rows = query.ToList();
  38. Assert.AreEqual(3, rows.Count);
  39. Assert.AreEqual(0, rows.Select(u => u.fatherId).Except(new int?[] { 4, 5, null }).Count());
  40. Assert.AreEqual(0, rows.Select(u => u.motherId).Except(new int?[] { 6, null }).Count());
  41. }
  42. }
  43. [TestMethod]
  44. public void Test_Group_Complex()
  45. {
  46. using var dbContext = DataSource.CreateDbContext();
  47. var userQuery = dbContext.Query<User>();
  48. // Linq Expression
  49. {
  50. var query =
  51. from user in userQuery.Where(u => u.id > 1)
  52. group user by new { user.fatherId, user.motherId } into userGroup
  53. where userGroup.Key.motherId != null && userGroup.Count() >= 1
  54. orderby userGroup.Key.fatherId descending, userGroup.Count() descending
  55. select new { userGroup.Key.fatherId, userGroup.Key.motherId, rowCount = userGroup.Count(), maxId = userGroup.Max(m => m.id) };
  56. query = query.Skip(1).Take(1);
  57. var sql = query.ToExecuteString();
  58. var rows = query.ToList();
  59. Assert.AreEqual(1, rows.Count);
  60. Assert.AreEqual(4, rows[0].fatherId);
  61. Assert.AreEqual(6, rows[0].motherId);
  62. Assert.AreEqual(1, rows[0].rowCount);
  63. Assert.AreEqual(2, rows[0].maxId);
  64. }
  65. // Lambda Expression
  66. {
  67. var query =
  68. userQuery
  69. .Where(u => u.id > 1)
  70. .GroupBy(user => new { user.fatherId, user.motherId })
  71. .Where(userGroup => userGroup.Key.motherId != null)
  72. .OrderByDescending(userGroup => userGroup.Key.fatherId)
  73. .Select(userGroup => new
  74. {
  75. userGroup.Key.fatherId,
  76. userGroup.Key.motherId,
  77. rowCount = userGroup.Count(),
  78. maxId = userGroup.Max(m => m.id)
  79. })
  80. .Skip(1)
  81. .Take(1)
  82. ;
  83. var sql = query.ToExecuteString();
  84. var rows = query.ToList();
  85. Assert.AreEqual(1, rows.Count);
  86. Assert.AreEqual(4, rows[0].fatherId);
  87. Assert.AreEqual(6, rows[0].motherId);
  88. Assert.AreEqual(1, rows[0].rowCount);
  89. Assert.AreEqual(2, rows[0].maxId);
  90. }
  91. }
  92. [TestMethod]
  93. public void Test_Others()
  94. {
  95. using var dbContext = DataSource.CreateDbContext();
  96. var userQuery = dbContext.Query<User>();
  97. {
  98. var query =
  99. userQuery
  100. .Where(user => user.id < 7)
  101. .GroupBy(user => new { user.fatherId, user.motherId })
  102. .OrderByDescending(group => group.Count())
  103. .Select(userGroup => new
  104. {
  105. userGroup.Key.fatherId,
  106. rowCount = userGroup.Count(),
  107. maxId = userGroup.Max(m => m.id),
  108. minId = userGroup.Min(m => m.id),
  109. sumId = userGroup.Sum(m => m.id),
  110. avgId = userGroup.Average(m => (double)m.id)
  111. })
  112. ;
  113. var sql = query.ToExecuteString();
  114. var rows = query.ToList();
  115. Assert.AreEqual(3, rows.Count);
  116. var row = rows[1];
  117. Assert.AreEqual(2, row.rowCount);
  118. Assert.AreEqual(2, row.maxId);
  119. Assert.AreEqual(1, row.minId);
  120. Assert.AreEqual(3, row.sumId);
  121. Assert.AreEqual(1.5, row.avgId);
  122. }
  123. {
  124. var query =
  125. userQuery
  126. .GroupBy(user => new { user.fatherId, user.motherId })
  127. .Where(userGroup => userGroup.Key.motherId != null)
  128. .OrderByDescending(userGroup => userGroup.Key.fatherId)
  129. .Select(userGroup => new { userGroup.Key.fatherId, userGroup.Key.motherId })
  130. ;
  131. var rows = query.ToList();
  132. var sql = query.ToExecuteString();
  133. Assert.AreEqual(2, rows.Count);
  134. Assert.AreEqual(5, rows[0].fatherId);
  135. }
  136. {
  137. var query =
  138. userQuery
  139. .GroupBy(user => user.fatherId)
  140. .Where(userGroup => userGroup.Key != null)
  141. .OrderByDescending(userGroup => userGroup.Key)
  142. .Select(userGroup => new { fatherId = userGroup.Key, rowCount = userGroup.Count() })
  143. ;
  144. var rows = query.ToList();
  145. var sql = query.ToExecuteString();
  146. Assert.AreEqual(2, rows.Count);
  147. Assert.AreEqual(5, rows[0].fatherId);
  148. }
  149. }
  150. }
  151. }