Query_Group_Test.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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_Group_Test
  8. {
  9. [TestMethod]
  10. public void Test_Group_Demo()
  11. {
  12. using var dbContext = DataSource.CreateDbContext();
  13. var userQuery = dbContext.Query<User>();
  14. // Linq Expression
  15. {
  16. var query =
  17. from user in userQuery
  18. group user by new { user.fatherId, user.motherId } into userGroup
  19. select new { userGroup.Key.fatherId, userGroup.Key.motherId };
  20. var sql = query.ToExecuteString();
  21. var rows = query.ToList();
  22. Assert.AreEqual(3, rows.Count);
  23. Assert.AreEqual(0, rows.Select(u => u.fatherId).Except(new int?[] { 4, 5, null }).Count());
  24. Assert.AreEqual(0, rows.Select(u => u.motherId).Except(new int?[] { 6, null }).Count());
  25. }
  26. // Lambda Expression
  27. {
  28. var query =
  29. userQuery
  30. .GroupBy(user => new { user.fatherId, user.motherId })
  31. .Select(userGroup => new
  32. {
  33. userGroup.Key.fatherId,
  34. userGroup.Key.motherId
  35. })
  36. ;
  37. var sql = query.ToExecuteString();
  38. var rows = query.ToList();
  39. Assert.AreEqual(3, rows.Count);
  40. Assert.AreEqual(0, rows.Select(u => u.fatherId).Except(new int?[] { 4, 5, null }).Count());
  41. Assert.AreEqual(0, rows.Select(u => u.motherId).Except(new int?[] { 6, null }).Count());
  42. }
  43. }
  44. [TestMethod]
  45. public void Test_Group_Complex()
  46. {
  47. using var dbContext = DataSource.CreateDbContext();
  48. var userQuery = dbContext.Query<User>();
  49. // Linq Expression
  50. {
  51. var query =
  52. from user in userQuery.Where(u => u.id > 1)
  53. group user by new { user.fatherId, user.motherId } into userGroup
  54. where userGroup.Key.motherId != null && userGroup.Count() >= 1
  55. orderby userGroup.Key.fatherId descending, userGroup.Count() descending
  56. select new { userGroup.Key.fatherId, userGroup.Key.motherId, rowCount = userGroup.Count(), maxId = userGroup.Max(m => m.id) };
  57. query = query.Skip(1).Take(1);
  58. var sql = query.ToExecuteString();
  59. var rows = query.ToList();
  60. Assert.AreEqual(1, rows.Count);
  61. Assert.AreEqual(4, rows[0].fatherId);
  62. Assert.AreEqual(6, rows[0].motherId);
  63. Assert.AreEqual(1, rows[0].rowCount);
  64. Assert.AreEqual(2, rows[0].maxId);
  65. }
  66. // Lambda Expression
  67. {
  68. var query =
  69. userQuery
  70. .Where(u => u.id > 1)
  71. .GroupBy(user => new { user.fatherId, user.motherId })
  72. .Where(userGroup => userGroup.Key.motherId != null)
  73. .OrderByDescending(userGroup => userGroup.Key.fatherId)
  74. .Select(userGroup => new
  75. {
  76. userGroup.Key.fatherId,
  77. userGroup.Key.motherId,
  78. rowCount = userGroup.Count(),
  79. maxId = userGroup.Max(m => m.id)
  80. })
  81. .Skip(1)
  82. .Take(1)
  83. ;
  84. var sql = query.ToExecuteString();
  85. var rows = query.ToList();
  86. Assert.AreEqual(1, rows.Count);
  87. Assert.AreEqual(4, rows[0].fatherId);
  88. Assert.AreEqual(6, rows[0].motherId);
  89. Assert.AreEqual(1, rows[0].rowCount);
  90. Assert.AreEqual(2, rows[0].maxId);
  91. }
  92. }
  93. [TestMethod]
  94. public void Test_Others()
  95. {
  96. using var dbContext = DataSource.CreateDbContext();
  97. var userQuery = dbContext.Query<User>();
  98. {
  99. var query =
  100. userQuery
  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. }