MappingFieldExpression.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using Ant.Extensions;
  2. using Ant.DbExpressions;
  3. using Ant.Descriptors;
  4. using Ant.Query.Mapping;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Linq.Expressions;
  9. using System.Reflection;
  10. using Ant.Utility;
  11. namespace Ant.Query
  12. {
  13. public class MappingFieldExpression : IMappingObjectExpression
  14. {
  15. Type _type;
  16. DbExpression _exp;
  17. public MappingFieldExpression(Type type, DbExpression exp)
  18. {
  19. this._type = type;
  20. this._exp = exp;
  21. }
  22. public DbExpression Expression { get { return this._exp; } }
  23. public DbExpression NullChecking { get; set; }
  24. public void AddConstructorParameter(ParameterInfo p, DbExpression exp)
  25. {
  26. throw new NotSupportedException();
  27. }
  28. public void AddConstructorEntityParameter(ParameterInfo p, IMappingObjectExpression exp)
  29. {
  30. throw new NotSupportedException();
  31. }
  32. public void AddMemberExpression(MemberInfo p, DbExpression exp)
  33. {
  34. throw new NotSupportedException();
  35. }
  36. public void AddNavMemberExpression(MemberInfo p, IMappingObjectExpression exp)
  37. {
  38. throw new NotSupportedException();
  39. }
  40. public DbExpression GetMemberExpression(MemberInfo memberInfo)
  41. {
  42. throw new NotSupportedException();
  43. }
  44. public IMappingObjectExpression GetNavMemberExpression(MemberInfo memberInfo)
  45. {
  46. throw new NotSupportedException();
  47. }
  48. public DbExpression GetDbExpression(MemberExpression memberExpressionDeriveParameter)
  49. {
  50. Stack<MemberExpression> memberExpressions = ExpressionExtensions.Reverse(memberExpressionDeriveParameter);
  51. if (memberExpressions.Count == 0)
  52. throw new Exception();
  53. DbExpression ret = this._exp;
  54. foreach (MemberExpression memberExpression in memberExpressions)
  55. {
  56. MemberInfo member = memberExpression.Member;
  57. ret = DbExpression.MemberAccess(member, ret);
  58. }
  59. if (ret == null)
  60. throw new Exception(memberExpressionDeriveParameter.ToString());
  61. return ret;
  62. }
  63. public IMappingObjectExpression GetNavMemberExpression(MemberExpression exp)
  64. {
  65. throw new NotSupportedException();
  66. }
  67. public IObjectActivatorCreator GenarateObjectActivatorCreator(DbSqlQueryExpression sqlQuery)
  68. {
  69. int ordinal;
  70. ordinal = MappingObjectExpressionHelper.TryGetOrAddColumn(sqlQuery, this._exp).Value;
  71. MappingField mf = new MappingField(this._type, ordinal);
  72. mf.CheckNullOrdinal = MappingObjectExpressionHelper.TryGetOrAddColumn(sqlQuery, this.NullChecking);
  73. return mf;
  74. }
  75. public IMappingObjectExpression ToNewObjectExpression(DbSqlQueryExpression sqlQuery, DbTable table)
  76. {
  77. DbColumnAccessExpression cae = null;
  78. cae = MappingObjectExpressionHelper.ParseColumnAccessExpression(sqlQuery, table, this._exp);
  79. MappingFieldExpression mf = new MappingFieldExpression(this._type, cae);
  80. mf.NullChecking = MappingObjectExpressionHelper.TryGetOrAddNullChecking(sqlQuery, table, this.NullChecking);
  81. return mf;
  82. }
  83. public void SetNullChecking(DbExpression exp)
  84. {
  85. if (this.NullChecking == null)
  86. this.NullChecking = exp;
  87. }
  88. }
  89. }