Query_ScopeParam_LeftJoin_Test.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Data;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. namespace Vitorm.MsTest.CommonTest
  4. {
  5. [TestClass]
  6. public class Query_ScopeParam_LeftJoin_Test
  7. {
  8. [TestMethod]
  9. public void Test_Join_Demo()
  10. {
  11. using var dbContext = DataSource.CreateDbContext();
  12. var userQuery = dbContext.Query<User>();
  13. // params form method arg
  14. QueryByArg(userQuery, 2);
  15. // params from scope
  16. {
  17. var id = 2;
  18. var query =
  19. from user in userQuery
  20. from father in userQuery.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  21. where user.id > id
  22. orderby user.id
  23. select new { user, father };
  24. var sql = query.ToExecuteString();
  25. var userList = query.ToList();
  26. Assert.AreEqual(4, userList.Count);
  27. Assert.AreEqual(3, userList[0].user.id);
  28. Assert.AreEqual(5, userList[0].father?.id);
  29. Assert.AreEqual(4, userList[1].user.id);
  30. Assert.AreEqual(null, userList[1].father?.name);
  31. }
  32. // params from scope
  33. {
  34. var userArg = new { id = 2 };
  35. var query =
  36. from user in userQuery
  37. from father in userQuery.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  38. where user.id > userArg.id
  39. orderby user.id
  40. select new { user, father };
  41. var sql = query.ToExecuteString();
  42. var userList = query.ToList();
  43. Assert.AreEqual(4, userList.Count);
  44. Assert.AreEqual(3, userList[0].user.id);
  45. Assert.AreEqual(5, userList[0].father?.id);
  46. Assert.AreEqual(4, userList[1].user.id);
  47. Assert.AreEqual(null, userList[1].father?.name);
  48. }
  49. }
  50. void QueryByArg(IQueryable<User> userQuery, int id)
  51. {
  52. // Linq Expression
  53. {
  54. var query =
  55. from user in userQuery
  56. from father in userQuery.Where(father => user.fatherId == father.id).DefaultIfEmpty()
  57. where user.id > id
  58. orderby user.id
  59. select new { user, father };
  60. var sql = query.ToExecuteString();
  61. var userList = query.ToList();
  62. Assert.AreEqual(4, userList.Count);
  63. Assert.AreEqual(3, userList[0].user.id);
  64. Assert.AreEqual(5, userList[0].father?.id);
  65. Assert.AreEqual(4, userList[1].user.id);
  66. Assert.AreEqual(null, userList[1].father?.name);
  67. }
  68. }
  69. }
  70. }