123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- using System.Data;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- namespace Vitorm.MsTest.CommonTest
- {
- [TestClass]
- public class Query_Group_Test
- {
- [TestMethod]
- public void Test_Group_Demo()
- {
- using var dbContext = DataSource.CreateDbContext();
- var userQuery = dbContext.Query<User>();
- // Linq Expression
- {
- var query =
- from user in userQuery
- group user by new { user.fatherId, user.motherId } into userGroup
- select new { userGroup.Key.fatherId, userGroup.Key.motherId };
- var sql = query.ToExecuteString();
- var rows = query.ToList();
- Assert.AreEqual(3, rows.Count);
- Assert.AreEqual(0, rows.Select(u => u.fatherId).Except(new int?[] { 4, 5, null }).Count());
- Assert.AreEqual(0, rows.Select(u => u.motherId).Except(new int?[] { 6, null }).Count());
- }
- // Lambda Expression
- {
- var query =
- userQuery
- .GroupBy(user => new { user.fatherId, user.motherId })
- .Select(userGroup => new
- {
- userGroup.Key.fatherId,
- userGroup.Key.motherId
- })
- ;
- var sql = query.ToExecuteString();
- var rows = query.ToList();
- Assert.AreEqual(3, rows.Count);
- Assert.AreEqual(0, rows.Select(u => u.fatherId).Except(new int?[] { 4, 5, null }).Count());
- Assert.AreEqual(0, rows.Select(u => u.motherId).Except(new int?[] { 6, null }).Count());
- }
- }
- [TestMethod]
- public void Test_Group_Complex()
- {
- using var dbContext = DataSource.CreateDbContext();
- var userQuery = dbContext.Query<User>();
- // Linq Expression
- {
- var query =
- from user in userQuery.Where(u => u.id > 1)
- group user by new { user.fatherId, user.motherId } into userGroup
- where userGroup.Key.motherId != null && userGroup.Count() >= 1
- orderby userGroup.Key.fatherId descending, userGroup.Count() descending
- select new { userGroup.Key.fatherId, userGroup.Key.motherId, rowCount = userGroup.Count(), maxId = userGroup.Max(m => m.id) };
- query = query.Skip(1).Take(1);
- var sql = query.ToExecuteString();
- var rows = query.ToList();
- Assert.AreEqual(1, rows.Count);
- Assert.AreEqual(4, rows[0].fatherId);
- Assert.AreEqual(6, rows[0].motherId);
- Assert.AreEqual(1, rows[0].rowCount);
- Assert.AreEqual(2, rows[0].maxId);
- }
- // Lambda Expression
- {
- var query =
- userQuery
- .Where(u => u.id > 1)
- .GroupBy(user => new { user.fatherId, user.motherId })
- .Where(userGroup => userGroup.Key.motherId != null)
- .OrderByDescending(userGroup => userGroup.Key.fatherId)
- .Select(userGroup => new
- {
- userGroup.Key.fatherId,
- userGroup.Key.motherId,
- rowCount = userGroup.Count(),
- maxId = userGroup.Max(m => m.id)
- })
- .Skip(1)
- .Take(1)
- ;
- var sql = query.ToExecuteString();
- var rows = query.ToList();
- Assert.AreEqual(1, rows.Count);
- Assert.AreEqual(4, rows[0].fatherId);
- Assert.AreEqual(6, rows[0].motherId);
- Assert.AreEqual(1, rows[0].rowCount);
- Assert.AreEqual(2, rows[0].maxId);
- }
- }
- [TestMethod]
- public void Test_Others()
- {
- using var dbContext = DataSource.CreateDbContext();
- var userQuery = dbContext.Query<User>();
- {
- var query =
- userQuery
- .GroupBy(user => new { user.fatherId, user.motherId })
- .OrderByDescending(group => group.Count())
- .Select(userGroup => new
- {
- userGroup.Key.fatherId,
- rowCount = userGroup.Count(),
- maxId = userGroup.Max(m => m.id),
- minId = userGroup.Min(m => m.id),
- sumId = userGroup.Sum(m => m.id),
- avgId = userGroup.Average(m => (double)m.id)
- })
- ;
- var sql = query.ToExecuteString();
- var rows = query.ToList();
- Assert.AreEqual(3, rows.Count);
- var row = rows[1];
- Assert.AreEqual(2, row.rowCount);
- Assert.AreEqual(2, row.maxId);
- Assert.AreEqual(1, row.minId);
- Assert.AreEqual(3, row.sumId);
- Assert.AreEqual(1.5, row.avgId);
- }
- {
- var query =
- userQuery
- .GroupBy(user => new { user.fatherId, user.motherId })
- .Where(userGroup => userGroup.Key.motherId != null)
- .OrderByDescending(userGroup => userGroup.Key.fatherId)
- .Select(userGroup => new { userGroup.Key.fatherId, userGroup.Key.motherId })
- ;
- var rows = query.ToList();
- var sql = query.ToExecuteString();
- Assert.AreEqual(2, rows.Count);
- Assert.AreEqual(5, rows[0].fatherId);
- }
- {
- var query =
- userQuery
- .GroupBy(user => user.fatherId)
- .Where(userGroup => userGroup.Key != null)
- .OrderByDescending(userGroup => userGroup.Key)
- .Select(userGroup => new { fatherId = userGroup.Key, rowCount = userGroup.Count() })
- ;
- var rows = query.ToList();
- var sql = query.ToExecuteString();
- Assert.AreEqual(2, rows.Count);
- Assert.AreEqual(5, rows[0].fatherId);
- }
- }
- }
- }
|