RootQueryState.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Ant.DbExpressions;
  2. using System;
  3. using Ant.Utility;
  4. using Ant.Descriptors;
  5. using Ant.ORM;
  6. namespace Ant.Query.QueryState
  7. {
  8. internal sealed class RootQueryState : QueryStateBase
  9. {
  10. Type _elementType;
  11. public RootQueryState(Type elementType)
  12. : base(CreateResultElement(elementType))
  13. {
  14. this._elementType = elementType;
  15. }
  16. public override FromQueryResult ToFromQueryResult()
  17. {
  18. if (this.Result.Condition == null)
  19. {
  20. FromQueryResult result = new FromQueryResult();
  21. result.FromTable = this.Result.FromTable;
  22. result.MappingObjectExpression = this.Result.MappingObjectExpression;
  23. return result;
  24. }
  25. return base.ToFromQueryResult();
  26. }
  27. /// <summary>
  28. /// 创建结果元素
  29. /// </summary>
  30. /// <param name="type"></param>
  31. /// <returns></returns>
  32. static ResultElement CreateResultElement(Type type)
  33. {
  34. //TODO init _resultElement
  35. ResultElement resultElement = new ResultElement();
  36. MetaData typeDescriptor = new MetaData();
  37. typeDescriptor.FiledMeta = MetaDataManager.GetMetaData(type);//获取实体元素
  38. string alias = resultElement.GenerateUniqueTableAlias(typeDescriptor.FiledMeta.Table.Name);
  39. resultElement.FromTable = CreateRootTable(typeDescriptor.FiledMeta.Table, alias);
  40. MappingObjectExpression moe = new MappingObjectExpression(typeDescriptor.FiledMeta.EntityType.GetConstructor(Type.EmptyTypes));
  41. DbTableSegment tableExp = resultElement.FromTable.Table;
  42. DbTable table = new DbTable(alias);
  43. foreach (var item in typeDescriptor.FiledMeta.MemberColumnMap)//遍历实体的所有元素
  44. {
  45. moe.AddMemberExpression(item.Key, item.Value);
  46. if (item.Key.Name.ToLower() == typeDescriptor.FiledMeta.PrimaryKey.Column.Name.ToLower())
  47. moe.PrimaryKey = item.Value;
  48. }
  49. resultElement.MappingObjectExpression = moe;
  50. return resultElement;
  51. }
  52. /// <summary>
  53. ///
  54. /// </summary>
  55. /// <param name="table"></param>
  56. /// <param name="alias"></param>
  57. /// <returns></returns>
  58. static DbFromTableExpression CreateRootTable(DbTable table, string alias)
  59. {
  60. DbTableExpression tableExp = new DbTableExpression(table);
  61. DbTableSegment tableSeg = new DbTableSegment(tableExp, alias);
  62. var fromTableExp = new DbFromTableExpression(tableSeg);
  63. return fromTableExp;
  64. }
  65. }
  66. }