MakeJoinTable.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Ant.ORM
  6. {
  7. /// <summary>
  8. /// 关联表
  9. /// </summary>
  10. public class MakeJoinTable
  11. {
  12. private static object lockHelper = new object();
  13. private static volatile MakeJoinTable instance = null;
  14. public List<JoinOnTableNode> RootList = new List<JoinOnTableNode>();
  15. private JoinOnTableNode item;
  16. private int i = 0;
  17. public MakeJoinTable()
  18. {
  19. }
  20. public static MakeJoinTable Instance
  21. {
  22. get
  23. {
  24. if (instance == null)
  25. {
  26. lock (lockHelper)
  27. {
  28. if (instance == null)
  29. {
  30. instance = new MakeJoinTable();
  31. }
  32. }
  33. }
  34. return instance;
  35. }
  36. }
  37. #region IDictionary 成员
  38. /// <summary>
  39. /// 左关联查询(左边是主表,右边是关联表)
  40. /// </summary>
  41. /// <typeparam name="TM">主表</typeparam>
  42. /// <typeparam name="TN">次表</typeparam>
  43. /// <param name="asname">关联表别名</param>
  44. /// <returns></returns>
  45. public MakeJoinTable LeftJoin<TM, TN>(string asname)
  46. {
  47. item = new JoinOnTableNode();
  48. item.TableName = typeof(TM).Name;
  49. item.NTableName = typeof(TN).Name;
  50. item.NTableAsName = asname;
  51. item.JoinType = JoinTypes.LeftJoin;
  52. return this;
  53. }
  54. /// <summary>
  55. /// InnerJoin关联查询(左边是主表,右边是关联表)
  56. /// </summary>
  57. /// <typeparam name="TM">主表</typeparam>
  58. /// <typeparam name="TN">次表</typeparam>
  59. /// <param name="asname">关联表别名</param>
  60. /// <returns></returns>
  61. public MakeJoinTable InnerJoin<TM, TN>(string asname)
  62. {
  63. item = new JoinOnTableNode();
  64. item.TableName = typeof(TM).Name;
  65. item.NTableName = typeof(TN).Name;
  66. item.NTableAsName = asname;
  67. item.JoinType = JoinTypes.Inner;
  68. return this;
  69. }
  70. /// <summary>
  71. /// 右关联查询(左边是主表,右边是关联表)
  72. /// </summary>
  73. /// <typeparam name="TM">主表</typeparam>
  74. /// <typeparam name="TN">次表</typeparam>
  75. /// <param name="asname">关联表别名</param>
  76. /// <returns></returns>
  77. public MakeJoinTable RihtJoin<TM, TN>(string asname)
  78. {
  79. item = new JoinOnTableNode();
  80. item.TableName = typeof(TM).Name;
  81. item.NTableName = typeof(TN).Name;
  82. item.NTableAsName = asname;
  83. item.JoinType = JoinTypes.RightJoin;
  84. return this;
  85. }
  86. /// <summary>
  87. /// 关联表条件
  88. /// </summary>
  89. /// <param name="mSql">主表关联字段</param>
  90. /// <param name="nSql">次表关联字段</param>
  91. /// <returns></returns>
  92. public MakeJoinTable JoinOn(Enum mSql, Enum nSql)
  93. {
  94. item.JoinOn1 = mSql.ToString();
  95. item.JoinOn2 = nSql.ToString();
  96. RootList.Add(item);
  97. return this;
  98. }
  99. #endregion
  100. }
  101. public class JoinColumn
  102. {
  103. private string TableName;
  104. private int Num;
  105. }
  106. }