123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using Ant.DbExpressions;
- using System;
- using Ant.Utility;
- using Ant.Descriptors;
- using Ant.ORM;
- namespace Ant.Query.QueryState
- {
- internal sealed class RootQueryState : QueryStateBase
- {
- Type _elementType;
- public RootQueryState(Type elementType)
- : base(CreateResultElement(elementType))
- {
- this._elementType = elementType;
- }
- public override FromQueryResult ToFromQueryResult()
- {
- if (this.Result.Condition == null)
- {
- FromQueryResult result = new FromQueryResult();
- result.FromTable = this.Result.FromTable;
- result.MappingObjectExpression = this.Result.MappingObjectExpression;
- return result;
- }
- return base.ToFromQueryResult();
- }
- /// <summary>
- /// 创建结果元素
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- static ResultElement CreateResultElement(Type type)
- {
- //TODO init _resultElement
- ResultElement resultElement = new ResultElement();
- MetaData typeDescriptor = new MetaData();
- typeDescriptor.FiledMeta = MetaDataManager.GetMetaData(type);//获取实体元素
- string alias = resultElement.GenerateUniqueTableAlias(typeDescriptor.FiledMeta.Table.Name);
- resultElement.FromTable = CreateRootTable(typeDescriptor.FiledMeta.Table, alias);
- MappingObjectExpression moe = new MappingObjectExpression(typeDescriptor.FiledMeta.EntityType.GetConstructor(Type.EmptyTypes));
- DbTableSegment tableExp = resultElement.FromTable.Table;
- DbTable table = new DbTable(alias);
- foreach (var item in typeDescriptor.FiledMeta.MemberColumnMap)//遍历实体的所有元素
- {
- moe.AddMemberExpression(item.Key, item.Value);
- if (item.Key.Name.ToLower() == typeDescriptor.FiledMeta.PrimaryKey.Column.Name.ToLower())
- moe.PrimaryKey = item.Value;
- }
- resultElement.MappingObjectExpression = moe;
- return resultElement;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="table"></param>
- /// <param name="alias"></param>
- /// <returns></returns>
- static DbFromTableExpression CreateRootTable(DbTable table, string alias)
- {
- DbTableExpression tableExp = new DbTableExpression(table);
- DbTableSegment tableSeg = new DbTableSegment(tableExp, alias);
- var fromTableExp = new DbFromTableExpression(tableSeg);
- return fromTableExp;
- }
- }
- }
|