QueryTest_Vitorm.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Vitorm;
  2. namespace App.QueryTest
  3. {
  4. public class QueryTest_Vitorm : IBenchmarkQuery
  5. {
  6. public static void InitDb()
  7. {
  8. Data.Drop<User>();
  9. Data.Create<User>();
  10. var users = new List<User> {
  11. new User { id=1, name="u146", fatherId=4, motherId=6 },
  12. new User { id=2, name="u246", fatherId=4, motherId=6 },
  13. new User { id=3, name="u356", fatherId=5, motherId=6 },
  14. new User { id=4, name="u400" },
  15. new User { id=5, name="u500" },
  16. new User { id=6, name="u600" },
  17. };
  18. Data.AddRange(users);
  19. users = Enumerable.Range(7, 1000).Select(id => new User { id = id, name = "user" + id }).ToList();
  20. Data.AddRange(users);
  21. }
  22. IQueryable<User> users = Data.Query<User>();
  23. public IQueryable<User> GetQueryable() => users;
  24. public void Query(QueryConfig config)
  25. {
  26. for (int i = 0; i < config.repeatCount; i++)
  27. {
  28. if (config.queryJoin) QueryJoin(config.take);
  29. else Query(config.take);
  30. }
  31. }
  32. public void QueryJoin(int take)
  33. {
  34. var queryable = GetQueryable();
  35. var query =
  36. from user in queryable
  37. from father in queryable.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  38. from mother in queryable.Where(mother => user.motherId == mother.id).DefaultIfEmpty()
  39. where user.id > 1
  40. orderby user.id
  41. select new
  42. {
  43. user,
  44. father,
  45. mother,
  46. testId = user.id + 100,
  47. hasFather = father.name != null ? true : false
  48. }
  49. ;
  50. query = query.Skip(1).Take(take);
  51. var userList = query.ToList();
  52. var rowCount = userList.Count();
  53. if (rowCount != take) throw new Exception($"query failed, expected row count : {take} , actual count: {rowCount} ");
  54. }
  55. public void Query(int take)
  56. {
  57. var userSet = Data.Query<User>();
  58. var query1 =
  59. from user in userSet
  60. where user.id > 1
  61. orderby user.id
  62. select user;
  63. var query = query1.Skip(1).Take(take);
  64. var userList = query.ToList();
  65. var rowCount = userList.Count();
  66. if (rowCount != take) throw new Exception($"query failed, expected row count : {take} , actual count: {rowCount} ");
  67. }
  68. // Entity Definition
  69. [System.ComponentModel.DataAnnotations.Schema.Table("User")]
  70. public class User
  71. {
  72. [System.ComponentModel.DataAnnotations.Key]
  73. public int id { get; set; }
  74. public string name { get; set; }
  75. public DateTime? birth { get; set; }
  76. public int? fatherId { get; set; }
  77. public int? motherId { get; set; }
  78. }
  79. }
  80. }