123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using Ant.Core;
- using Ant.Core.Visitors;
- using Ant.Data;
- using Ant.Infrastructure;
- using Ant.Mapper;
- using Ant.ORM;
- using Ant.Query.Mapping;
- using Ant.Query.QueryState;
- using Ant.Query.Visitors;
- using System.Collections;
- using System.Collections.Generic;
- using System.Data;
- using System.Data.SqlClient;
- using System.Diagnostics;
- namespace Ant.Query.Internals
- {
- class InternalQuery<T> : IEnumerable<T>, IEnumerable
- {
- Queryable<T> _query; DbCommandFactor _commandFactor;
- internal InternalQuery(Queryable<T> query)
- {
- this._query = query;
- this._commandFactor = GenerateCommandFactor();
- }
- /// <summary>
- /// 创建执行SQL语句的工厂
- /// </summary>
- /// <returns></returns>
- DbCommandFactor GenerateCommandFactor()
- {
- IQueryState qs = QueryExpressionVisitor.VisitQueryExpression(this._query.QueryExpression);
- MappingData data = qs.GenerateMappingData();//解析Lambda表达式
- IObjectActivator objectActivator;
- if (this._query._trackEntity)
- objectActivator = data.ObjectActivatorCreator.CreateObjectActivator(this._query.DbContext);
- else
- objectActivator = data.ObjectActivatorCreator.CreateObjectActivator();
- IDbExpressionTranslator translator = this._query.DbContext.DbContextServiceProvider.CreateDbExpressionTranslator();
- List<DbParam> parameters;
- string cmdText = translator.Translate(data.SqlQuery, out parameters);//解析SQL语句
- DbCommandFactor commandFactor = new DbCommandFactor(objectActivator, cmdText, parameters.ToArray());
- commandFactor.StrSql = SqlDataAccess.AppendDbCommandInfo(cmdText, parameters.ToArray());
- commandFactor.SqlConnection = this._query.db.ConnectionString;
- return commandFactor;
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns></returns>
- public IEnumerator<T> GetEnumerator()
- {
- // DbCommandFactor commandFactor = this.GenerateCommandFactor();
- var enumerator = QueryEnumeratorCreator.CreateEnumerator<T>(this._query.db, _commandFactor);//用于返回数据对象
- return enumerator;
- }
- IEnumerator IEnumerable.GetEnumerator()
- {
- return this.GetEnumerator();
- }
- /// <summary>
- /// 为了获取SQL语句
- /// </summary>
- /// <returns></returns>
- public override string ToString()
- {
- //DbCommandFactor commandFactor = this.GenerateCommandFactor();
- return SqlDataAccess.AppendDbCommandInfo(_commandFactor.CommandText, _commandFactor.Parameters);//返回SQL语句用于记日志;
- }
- /// <summary>
- /// 获取数据库连接
- /// </summary>
- /// <returns></returns>
- public string GetDataConnection()
- {
- return _commandFactor.SqlConnection;
- }
- }
- }
|