This commit is contained in:
sunkaixuan 2017-04-26 01:52:29 +08:00
parent fe4fcefcf3
commit 00b78e47a9
5 changed files with 33 additions and 65 deletions

View File

@ -18,19 +18,19 @@ namespace OrmTest
static void Main(string[] args) static void Main(string[] args)
{ {
//Unit Test //Unit Test
int eachCount = 10; int eachCount = 1;
new Field(eachCount).Init(); //new Field(eachCount).Init();
new Where(eachCount).Init(); //new Where(eachCount).Init();
new Method(eachCount).Init(); //new Method(eachCount).Init();
new JoinQuery(eachCount).Init(); //new JoinQuery(eachCount).Init();
new SingleQuery(eachCount).Init(); //new SingleQuery(eachCount).Init();
new SelectQuery(eachCount).Init(); new SelectQuery(eachCount).Init();
//Performance Test //Performance Test
for (int i = 0; i < 100; i++) for (int i = 0; i < 100; i++)
{ {
new SqlSugarPerformance().Select(); // new SqlSugarPerformance().Select();
} }
} }
} }

View File

@ -9,29 +9,6 @@ namespace SqlSugar
{ {
public class QueryableAccessory public class QueryableAccessory
{ {
protected List<SugarParameter> _Pars;
protected ILambdaExpressions _LambdaExpressions; protected ILambdaExpressions _LambdaExpressions;
protected List<SugarParameter> BasePars
{
get
{
if (_Pars == null)
_Pars = new List<SugarParameter>();
return _Pars;
}
}
protected void AddPars(object whereObj, SqlSugarClient context)
{
var sqlParsArray = context.Database.GetParameters(whereObj);
if (sqlParsArray != null)
this.BasePars.AddRange(sqlParsArray);
}
protected void AddPars(List<SugarParameter> pars, SqlSugarClient context)
{
if (_Pars == null)
_Pars = new List<SugarParameter>();
_Pars.AddRange(pars);
}
} }
} }

View File

@ -15,26 +15,20 @@ namespace SqlSugar
public IDb Db { get { return Context.Database; } } public IDb Db { get { return Context.Database; } }
public IDbBind Bind { get { return this.Db.DbBind; } } public IDbBind Bind { get { return this.Db.DbBind; } }
public ISqlBuilder SqlBuilder { get; set; } public ISqlBuilder SqlBuilder { get; set; }
public List<SugarParameter> Pars
{
get { return PubMethod.IsNullReturnNew<List<SugarParameter>>(base._Pars); }
set { base._Pars = value; }
}
public void Clear() public void Clear()
{ {
Pars = null;
SqlBuilder.LambadaQueryBuilder.Clear(); SqlBuilder.LambadaQueryBuilder.Clear();
} }
public ISugarQueryable<T> AddParameters(object pars) public ISugarQueryable<T> AddParameters(object whereObj)
{ {
AddPars(pars, Context); if (whereObj != null)
this.SqlBuilder.LambadaQueryBuilder.QueryPars.AddRange(Context.Database.GetParameters(whereObj));
return this; return this;
} }
public ISugarQueryable<T> AddParameters(SugarParameter[] pars) public ISugarQueryable<T> AddParameters(SugarParameter[] pars)
{ {
AddPars(pars, Context); this.SqlBuilder.LambadaQueryBuilder.QueryPars.AddRange(pars);
return this; return this;
} }
@ -68,7 +62,8 @@ namespace SqlSugar
{ {
var whereValue = SqlBuilder.LambadaQueryBuilder.WhereInfos; var whereValue = SqlBuilder.LambadaQueryBuilder.WhereInfos;
whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString)); whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString));
this.AddPars(whereObj, this.Context); if (whereObj != null)
this.SqlBuilder.LambadaQueryBuilder.QueryPars.AddRange(Context.Database.GetParameters(whereObj));
return this; return this;
} }
public ISugarQueryable<T> Where<T2>(Expression<Func<T2, bool>> expression) public ISugarQueryable<T> Where<T2>(Expression<Func<T2, bool>> expression)
@ -178,7 +173,7 @@ namespace SqlSugar
public ISugarQueryable<T> OrderBy(string orderFileds) public ISugarQueryable<T> OrderBy(string orderFileds)
{ {
var orderByValue = SqlBuilder.LambadaQueryBuilder.OrderByValue; var orderByValue = SqlBuilder.LambadaQueryBuilder.OrderByValue;
SqlBuilder.LambadaQueryBuilder.OrderByValue +=string.IsNullOrEmpty(orderByValue)?orderFileds:(","+orderFileds); SqlBuilder.LambadaQueryBuilder.OrderByValue += string.IsNullOrEmpty(orderByValue) ? orderFileds : ("," + orderFileds);
return this; return this;
} }
@ -302,8 +297,8 @@ namespace SqlSugar
var reval = InstanceFactory.GetQueryable<TResult>(this.Context.CurrentConnectionConfig); var reval = InstanceFactory.GetQueryable<TResult>(this.Context.CurrentConnectionConfig);
reval.Context = this.Context; reval.Context = this.Context;
reval.SqlBuilder = this.SqlBuilder; reval.SqlBuilder = this.SqlBuilder;
SqlBuilder.LambadaQueryBuilder.SelectValue = expression; reval.SqlBuilder.LambadaQueryBuilder.QueryPars = this.SqlBuilder.LambadaQueryBuilder.QueryPars;
reval.Pars = this.Pars; reval.SqlBuilder.LambadaQueryBuilder.SelectValue = expression;
return reval; return reval;
} }
@ -313,7 +308,6 @@ namespace SqlSugar
reval.Context = this.Context; reval.Context = this.Context;
reval.SqlBuilder = this.SqlBuilder; reval.SqlBuilder = this.SqlBuilder;
SqlBuilder.LambadaQueryBuilder.SelectValue = selectValue; SqlBuilder.LambadaQueryBuilder.SelectValue = selectValue;
reval.Pars = this.Pars;
return reval; return reval;
} }
public ISugarQueryable<T> Select(string selectValue) public ISugarQueryable<T> Select(string selectValue)
@ -349,15 +343,14 @@ namespace SqlSugar
public List<T> ToList() public List<T> ToList()
{ {
this.Pars.AddRange(SqlBuilder.LambadaQueryBuilder.QueryPars); var sqlObj = this.ToSql();
var sqlObj =this.ToSql();
var isComplexModel = Regex.IsMatch(sqlObj.Key, @"AS \[\w+\.\w+\]"); var isComplexModel = Regex.IsMatch(sqlObj.Key, @"AS \[\w+\.\w+\]");
using (var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray())) using (var dataReader = this.Db.GetDataReader(sqlObj.Key, sqlObj.Value.ToArray()))
{ {
var tType = typeof(T); var tType = typeof(T);
if (tType.IsAnonymousType()||isComplexModel) if (tType.IsAnonymousType() || isComplexModel)
{ {
return this.Context.RewritableMethods.DataReaderToDynamicList<T>(dataReader); return this.Context.RewritableMethods.DataReaderToDynamicList<T>(dataReader);
} }
else else
{ {
@ -384,7 +377,7 @@ namespace SqlSugar
public KeyValuePair<string, List<SugarParameter>> ToSql() public KeyValuePair<string, List<SugarParameter>> ToSql()
{ {
string sql = SqlBuilder.LambadaQueryBuilder.ToSqlString(); string sql = SqlBuilder.LambadaQueryBuilder.ToSqlString();
return new KeyValuePair<string, List<SugarParameter>>(sql, this.Pars); return new KeyValuePair<string, List<SugarParameter>>(sql, SqlBuilder.LambadaQueryBuilder.QueryPars);
} }
public DataTable ToDataTable() public DataTable ToDataTable()
@ -416,8 +409,8 @@ namespace SqlSugar
protected void _Where(Expression expression) protected void _Where(Expression expression)
{ {
var isSingle = SqlBuilder.LambadaQueryBuilder.IsSingle(); var isSingle = SqlBuilder.LambadaQueryBuilder.IsSingle();
var result=SqlBuilder.LambadaQueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple); var result = SqlBuilder.LambadaQueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.WhereSingle : ResolveExpressType.WhereMultiple);
SqlBuilder.LambadaQueryBuilder.WhereInfos.Add(SqlBuilder.AppendWhereOrAnd(SqlBuilder.LambadaQueryBuilder.WhereInfos.IsNullOrEmpty(),result.GetResultString())); SqlBuilder.LambadaQueryBuilder.WhereInfos.Add(SqlBuilder.AppendWhereOrAnd(SqlBuilder.LambadaQueryBuilder.WhereInfos.IsNullOrEmpty(), result.GetResultString()));
} }
protected ISugarQueryable<T> _OrderBy(Expression expression, OrderByType type = OrderByType.Asc) protected ISugarQueryable<T> _OrderBy(Expression expression, OrderByType type = OrderByType.Asc)
{ {

View File

@ -8,18 +8,23 @@ namespace SqlSugar
{ {
public abstract class LambadaQueryBuilder : IDMLBuilder public abstract class LambadaQueryBuilder : IDMLBuilder
{ {
public LambadaQueryBuilder()
{
this.QueryPars = new List<SugarParameter>();
}
#region Private Fileds #region Private Fileds
private List<SugarParameter> _QueryPars;
private List<JoinQueryInfo> _JoinQueryInfos; private List<JoinQueryInfo> _JoinQueryInfos;
private List<string> _WhereInfos; private List<string> _WhereInfos;
private string _TableNameString; private string _TableNameString;
#endregion #endregion
#region Service object #region Service object
public StringBuilder Sql { get; set; } public StringBuilder Sql { get; set; }
public SqlSugarClient Context { get; set; } public SqlSugarClient Context { get; set; }
public ILambdaExpressions LambdaExpressions { get; set; } public ILambdaExpressions LambdaExpressions { get; set; }
public ISqlBuilder Builder { get; set; } public ISqlBuilder Builder { get; set; }
#endregion #endregion
#region Splicing basic #region Splicing basic
@ -33,15 +38,7 @@ namespace SqlSugar
public string GroupByValue { get; set; } public string GroupByValue { get; set; }
public int WhereIndex { get; set; } public int WhereIndex { get; set; }
public int JoinIndex { get; set; } public int JoinIndex { get; set; }
public virtual List<SugarParameter> QueryPars public virtual List<SugarParameter> QueryPars { get; set; }
{
get
{
_QueryPars = PubMethod.IsNullReturnNew(_QueryPars);
return _QueryPars;
}
set { _QueryPars = value; }
}
public virtual List<JoinQueryInfo> JoinQueryInfos public virtual List<JoinQueryInfo> JoinQueryInfos
{ {
get get
@ -106,11 +103,13 @@ namespace SqlSugar
public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType) public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType)
{ {
ILambdaExpressions resolveExpress = this.LambdaExpressions; ILambdaExpressions resolveExpress = this.LambdaExpressions;
this.LambdaExpressions.Clear();
resolveExpress.JoinQueryInfos = Builder.LambadaQueryBuilder.JoinQueryInfos; resolveExpress.JoinQueryInfos = Builder.LambadaQueryBuilder.JoinQueryInfos;
resolveExpress.MappingColumns = Context.MappingColumns; resolveExpress.MappingColumns = Context.MappingColumns;
resolveExpress.MappingTables = Context.MappingTables; resolveExpress.MappingTables = Context.MappingTables;
resolveExpress.IgnoreComumnList = Context.IgnoreComumns; resolveExpress.IgnoreComumnList = Context.IgnoreComumns;
resolveExpress.Resolve(expression, resolveType); resolveExpress.Resolve(expression, resolveType);
this.QueryPars = new List<SugarParameter>();
this.QueryPars.AddRange(resolveExpress.Parameters); this.QueryPars.AddRange(resolveExpress.Parameters);
var reval = resolveExpress.Result; var reval = resolveExpress.Result;
return reval; return reval;

View File

@ -11,7 +11,6 @@ namespace SqlSugar
{ {
SqlSugarClient Context { get; set; } SqlSugarClient Context { get; set; }
ISqlBuilder SqlBuilder { get; set; } ISqlBuilder SqlBuilder { get; set; }
List<SugarParameter> Pars { get; set; }
ISugarQueryable<T> AddParameters(object pars); ISugarQueryable<T> AddParameters(object pars);
ISugarQueryable<T> AddParameters(SugarParameter[] pars); ISugarQueryable<T> AddParameters(SugarParameter[] pars);