old_flsystem/类库/SqlSugar/SqlSugarClient.cs

704 lines
35 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace SqlSugar
{
///<summary>
/// ** descriptionCreate datathis.access object
/// ** authorsunkaixuan
/// ** date2017/1/2
/// ** email:610262374@qq.com
/// </summary>
public partial class SqlSugarClient : IDisposable
{
#region Constructor
public SqlSugarClient(ConnectionConfig config)
{
this.Context = this;
this.CurrentConnectionConfig = config;
this.ContextID = Guid.NewGuid();
Check.ArgumentNullException(config, "config is null");
switch (config.DbType)
{
case DbType.MySql:
DependencyManagement.TryMySqlData();
break;
case DbType.SqlServer:
break;
case DbType.Sqlite:
DependencyManagement.TrySqlite();
break;
case DbType.Oracle:
DependencyManagement.TryOracle();
break;
case DbType.PostgreSQL:
DependencyManagement.TryPostgreSQL();
break;
default:
throw new Exception("ConnectionConfig.DbType is null");
}
}
#endregion
#region ADO Methods
/// <summary>
///Datathis.operation
/// </summary>
public virtual IAdo Ado
{
get
{
if (this.ContextAdo == null)
{
var result = InstanceFactory.GetAdo(this.Context.CurrentConnectionConfig);
this.ContextAdo = result;
result.Context = this.Context;
return result;
}
return this.Context._Ado;
}
}
#endregion
#region Aop Log Methods
public virtual AopProvider Aop { get { return new AopProvider(this.Context); } }
#endregion
#region Util Methods
[Obsolete("Use SqlSugarClient.Utilities")]
public virtual IContextMethods RewritableMethods
{
get { return this.Context.Utilities; }
set { this.Context.Utilities = value; }
}
public virtual IContextMethods Utilities
{
get
{
if (ContextRewritableMethods == null)
{
ContextRewritableMethods = new ContextMethods();
ContextRewritableMethods.Context = this.Context;
}
return ContextRewritableMethods;
}
set { ContextRewritableMethods = value; }
}
#endregion
#region Queryable
/// <summary>
/// Get datebase time
/// </summary>
/// <returns></returns>
public DateTime GetDate() {
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
return this.Ado.GetDateTime(sqlBuilder.FullSqlDateNow);
}
/// <summary>
/// Lambda Query operation
/// </summary>
public virtual ISugarQueryable<T> Queryable<T>()
{
InitMppingInfo<T>();
var result = this.CreateQueryable<T>();
return result;
}
/// <summary>
/// Lambda Query operation
/// </summary>
public virtual ISugarQueryable<T> Queryable<T>(string shortName)
{
var queryable = Queryable<T>();
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
/// <summary>
/// Lambda Query operation
/// </summary>
public virtual ISugarQueryable<ExpandoObject> Queryable(string tableName, string shortName)
{
var queryable = Queryable<ExpandoObject>();
queryable.SqlBuilder.QueryBuilder.EntityName = tableName;
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
return queryable;
}
public virtual ISugarQueryable<T, T2> Queryable<T, T2>(Expression<Func<T, T2, object[]>> joinExpression)
{
InitMppingInfo<T, T2>();
var types = new Type[] { typeof(T2) };
var queryable = InstanceFactory.GetQueryable<T, T2>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3> Queryable<T, T2, T3>(Expression<Func<T, T2, T3, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3>();
var types = new Type[] { typeof(T2), typeof(T3) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4> Queryable<T, T2, T3, T4>(Expression<Func<T, T2, T3, T4, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5> Queryable<T, T2, T3, T4, T5>(Expression<Func<T, T2, T3, T4, T5, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6> Queryable<T, T2, T3, T4, T5, T6>(Expression<Func<T, T2, T3, T4, T5, T6, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7> Queryable<T, T2, T3, T4, T5, T6, T7>(Expression<Func<T, T2, T3, T4, T5, T6, T7, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T7>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8> Queryable<T, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T7, T8>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
#region 9-12
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T7, T8, T9>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, object[]>> joinExpression)
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this.CurrentConnectionConfig);
this.CreateQueryJoin(joinExpression, types, queryable);
return queryable;
}
#endregion
public virtual ISugarQueryable<T, T2> Queryable<T, T2>(Expression<Func<T, T2, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2>();
var types = new Type[] { typeof(T2) };
var queryable = InstanceFactory.GetQueryable<T, T2>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3> Queryable<T, T2, T3>(Expression<Func<T, T2, T3, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3>();
var types = new Type[] { typeof(T2), typeof(T3) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4> Queryable<T, T2, T3, T4>(Expression<Func<T, T2, T3, T4, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5> Queryable<T, T2, T3, T4, T5>(Expression<Func<T, T2, T3, T4, T5, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6> Queryable<T, T2, T3, T4, T5, T6>(Expression<Func<T, T2, T3, T4, T5, T6, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7> Queryable<T, T2, T3, T4, T5, T6, T7>(Expression<Func<T, T2, T3, T4, T5, T6, T7, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8> Queryable<T, T2, T3, T4, T5, T6, T7, T8>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T8>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
#region 9-12
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T8, T9>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T8, T9, T10>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T8, T9, T10, T11>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Queryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Expression<Func<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, bool>> joinExpression) where T : class, new()
{
InitMppingInfo<T, T2, T3, T4, T5, T6, T8, T9, T10, T11, T12>();
var types = new Type[] { typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9), typeof(T10), typeof(T11), typeof(T12) };
var queryable = InstanceFactory.GetQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this.CurrentConnectionConfig);
this.CreateEasyQueryJoin(joinExpression, types, queryable);
queryable.Where(joinExpression);
return queryable;
}
public virtual ISugarQueryable<T> Queryable<T>(ISugarQueryable<T> queryable) where T : class, new()
{
var sqlobj = queryable.ToSql();
return this.SqlQueryable<T>(sqlobj.Key).AddParameters(sqlobj.Value);
}
public virtual ISugarQueryable<T, T2> Queryable<T, T2>(
ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, Expression<Func<T, T2, bool>> joinExpression) where T : class, new() where T2 : class, new()
{
return Queryable(joinQueryable1, joinQueryable2, JoinType.Inner, joinExpression);
}
public virtual ISugarQueryable<T, T2> Queryable<T, T2>(
ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, JoinType joinType, Expression<Func<T, T2, bool>> joinExpression) where T : class, new() where T2 : class, new()
{
Check.Exception(joinQueryable1.QueryBuilder.Take != null || joinQueryable1.QueryBuilder.Skip != null || joinQueryable1.QueryBuilder.OrderByValue.HasValue(), "joinQueryable1 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
Check.Exception(joinQueryable2.QueryBuilder.Take != null || joinQueryable2.QueryBuilder.Skip != null || joinQueryable2.QueryBuilder.OrderByValue.HasValue(), "joinQueryable2 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
sqlBuilder.Context = this.Context;
InitMppingInfo<T, T2>();
var types = new Type[] { typeof(T2) };
var queryable = InstanceFactory.GetQueryable<T, T2>(this.CurrentConnectionConfig);
queryable.Context = this.Context;
queryable.SqlBuilder = sqlBuilder;
queryable.QueryBuilder = InstanceFactory.GetQueryBuilder(this.CurrentConnectionConfig);
queryable.QueryBuilder.JoinQueryInfos = new List<JoinQueryInfo>();
queryable.QueryBuilder.Builder = sqlBuilder;
queryable.QueryBuilder.Context = this.Context;
queryable.QueryBuilder.EntityType = typeof(T);
queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig);
//master
var shortName1 = joinExpression.Parameters[0].Name;
var sqlObj1 = joinQueryable1.ToSql();
string sql1 = sqlObj1.Key;
UtilMethods.RepairReplicationParameters(ref sql1, sqlObj1.Value.ToArray(), 0,"Join");
queryable.QueryBuilder.EntityName = sqlBuilder.GetPackTable(sql1, shortName1); ;
queryable.QueryBuilder.Parameters.AddRange(sqlObj1.Value);
//join table 1
var shortName2 = joinExpression.Parameters[1].Name;
var sqlObj2 = joinQueryable2.ToSql();
string sql2 = sqlObj2.Key;
UtilMethods.RepairReplicationParameters(ref sql2, sqlObj2.Value.ToArray(), 1, "Join");
queryable.QueryBuilder.Parameters.AddRange(sqlObj2.Value);
var exp = queryable.QueryBuilder.GetExpressionValue(joinExpression, ResolveExpressType.WhereMultiple);
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2, shortName2) });
return queryable;
}
#endregion
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
{
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null ");
int i = 1;
List<KeyValuePair<string, List<SugarParameter>>> allItems = new List<KeyValuePair<string, List<SugarParameter>>>();
foreach (var item in queryables)
{
var sqlObj = item.ToSql();
string sql = sqlObj.Key;
UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "UnionAll");
if (sqlObj.Value.HasValue())
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sql, sqlObj.Value));
else
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sql, new List<SugarParameter>()));
i++;
}
var allSql = sqlBuilder.GetUnionAllSql(allItems.Select(it => it.Key).ToList());
var allParameters = allItems.SelectMany(it => it.Value).ToArray();
var resulut = this.Context.Queryable<ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable")).With(SqlWith.Null);
resulut.AddParameters(allParameters);
return resulut.Select<T>(sqlBuilder.SqlSelectAll);
}
public virtual ISugarQueryable<T> UnionAll<T>(List<ISugarQueryable<T>> queryables) where T : class, new()
{
Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null ");
return UnionAll(queryables.ToArray());
}
public virtual ISugarQueryable<T> Union<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
{
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
Check.Exception(queryables.IsNullOrEmpty(), "UnionAll.queryables is null ");
int i = 1;
List<KeyValuePair<string, List<SugarParameter>>> allItems = new List<KeyValuePair<string, List<SugarParameter>>>();
foreach (var item in queryables)
{
var sqlObj = item.ToSql();
string sql = sqlObj.Key;
UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "Union");
if (sqlObj.Value.HasValue())
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sql, sqlObj.Value));
else
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sql, new List<SugarParameter>()));
i++;
}
var allSql = sqlBuilder.GetUnionSql(allItems.Select(it => it.Key).ToList());
var allParameters = allItems.SelectMany(it => it.Value).ToArray();
var resulut = this.Context.Queryable<ExpandoObject>().AS(UtilMethods.GetPackTable(allSql, "unionTable")).With(SqlWith.Null);
resulut.AddParameters(allParameters);
return resulut.Select<T>(sqlBuilder.SqlSelectAll);
}
public virtual ISugarQueryable<T> Union<T>(List<ISugarQueryable<T>> queryables) where T : class, new()
{
Check.Exception(queryables.IsNullOrEmpty(), "Union.queryables is null ");
return Union(queryables.ToArray());
}
#endregion
#region SqlQueryable
public ISugarQueryable<T> SqlQueryable<T>(string sql) where T : class, new()
{
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
return this.Context.Queryable<T>().AS(sqlBuilder.GetPackTable(sql, sqlBuilder.GetDefaultShortName())).With(SqlWith.Null).Select(sqlBuilder.GetDefaultShortName()+".*");
}
#endregion
#region Insertable
public virtual IInsertable<T> Insertable<T>(T[] insertObjs) where T : class, new()
{
InitMppingInfo<T>();
InsertableProvider<T> result = this.CreateInsertable(insertObjs);
return result;
}
public virtual IInsertable<T> Insertable<T>(List<T> insertObjs) where T : class, new()
{
Check.ArgumentNullException(insertObjs, "Insertable.insertObjs can't be null");
return this.Context.Insertable(insertObjs.ToArray());
}
public virtual IInsertable<T> Insertable<T>(T insertObj) where T : class, new()
{
return this.Context.Insertable(new T[] { insertObj });
}
public virtual IInsertable<T> Insertable<T>(Dictionary<string, object> columnDictionary) where T : class, new()
{
InitMppingInfo<T>();
Check.Exception(columnDictionary == null || columnDictionary.Count == 0, "Insertable.columnDictionary can't be null");
var insertObject = this.Context.Utilities.DeserializeObject<T>(this.Context.Utilities.SerializeObject(columnDictionary));
var columns = columnDictionary.Select(it => it.Key).ToList();
return this.Context.Insertable(insertObject).InsertColumns(it => columns.Any(c => it.Equals(c, StringComparison.CurrentCultureIgnoreCase))); ;
}
public virtual IInsertable<T> Insertable<T>(dynamic insertDynamicObject) where T : class, new()
{
InitMppingInfo<T>();
if (insertDynamicObject is T)
{
return this.Context.Insertable((T)insertDynamicObject);
}
else
{
var columns = ((object)insertDynamicObject).GetType().GetProperties().Select(it => it.Name).ToList();
Check.Exception(columns.IsNullOrEmpty(), "Insertable.updateDynamicObject can't be null");
T insertObject = this.Context.Utilities.DeserializeObject<T>(this.Context.Utilities.SerializeObject(insertDynamicObject));
return this.Context.Insertable(insertObject).InsertColumns(it => columns.Any(c => it.Equals(c, StringComparison.CurrentCultureIgnoreCase)));
}
}
#endregion
#region Deleteable
public virtual IDeleteable<T> Deleteable<T>() where T : class, new()
{
InitMppingInfo<T>();
DeleteableProvider<T> result = this.CreateDeleteable<T>();
return result;
}
public virtual IDeleteable<T> Deleteable<T>(Expression<Func<T, bool>> expression) where T : class, new()
{
InitMppingInfo<T>();
return this.Context.Deleteable<T>().Where(expression);
}
public virtual IDeleteable<T> Deleteable<T>(dynamic primaryKeyValue) where T : class, new()
{
InitMppingInfo<T>();
return this.Context.Deleteable<T>().In(primaryKeyValue);
}
public virtual IDeleteable<T> Deleteable<T>(dynamic[] primaryKeyValues) where T : class, new()
{
InitMppingInfo<T>();
return this.Context.Deleteable<T>().In(primaryKeyValues);
}
public virtual IDeleteable<T> Deleteable<T>(List<dynamic> pkValue) where T : class, new()
{
InitMppingInfo<T>();
return this.Context.Deleteable<T>().In(pkValue);
}
public virtual IDeleteable<T> Deleteable<T>(T deleteObj) where T : class, new()
{
InitMppingInfo<T>();
return this.Context.Deleteable<T>().Where(deleteObj);
}
public virtual IDeleteable<T> Deleteable<T>(List<T> deleteObjs) where T : class, new()
{
InitMppingInfo<T>();
return this.Context.Deleteable<T>().Where(deleteObjs);
}
#endregion
#region Updateable
public virtual IUpdateable<T> Updateable<T>(T[] UpdateObjs) where T : class, new()
{
InitMppingInfo<T>();
UpdateableProvider<T> result = this.CreateUpdateable(UpdateObjs);
return result;
}
public virtual IUpdateable<T> Updateable<T>(List<T> UpdateObjs) where T : class, new()
{
Check.ArgumentNullException(UpdateObjs, "Updateable.UpdateObjs can't be null");
return Updateable(UpdateObjs.ToArray());
}
public virtual IUpdateable<T> Updateable<T>(T UpdateObj) where T : class, new()
{
return this.Context.Updateable(new T[] { UpdateObj });
}
public virtual IUpdateable<T> Updateable<T>() where T : class, new()
{
var result= this.Context.Updateable(new T[] { new T() });
result.UpdateParameterIsNull=true;
return result;
}
public virtual IUpdateable<T> Updateable<T>(Dictionary<string, object> columnDictionary) where T : class, new()
{
InitMppingInfo<T>();
Check.Exception(columnDictionary == null || columnDictionary.Count == 0, "Updateable.columnDictionary can't be null");
var updateObject = this.Context.Utilities.DeserializeObject<T>(this.Context.Utilities.SerializeObject(columnDictionary));
var columns = columnDictionary.Select(it => it.Key).ToList();
return this.Context.Updateable(updateObject).UpdateColumns(it => columns.Any(c => it.Equals(c, StringComparison.CurrentCultureIgnoreCase))); ;
}
public virtual IUpdateable<T> Updateable<T>(dynamic updateDynamicObject) where T : class, new()
{
InitMppingInfo<T>();
if (updateDynamicObject is T)
{
return this.Context.Updateable((T)updateDynamicObject);
}
else
{
var columns = ((object)updateDynamicObject).GetType().GetProperties().Select(it => it.Name).ToList();
Check.Exception(columns.IsNullOrEmpty(), "Updateable.updateDynamicObject can't be null");
T updateObject = this.Context.Utilities.DeserializeObject<T>(this.Context.Utilities.SerializeObject(updateDynamicObject));
return this.Context.Updateable(updateObject).UpdateColumns(it => columns.Any(c => it.Equals(c, StringComparison.CurrentCultureIgnoreCase))); ;
}
}
#endregion
#region Saveable
public ISaveable<T> Saveable<T>(List<T> saveObjects)where T:class,new()
{
return new SaveableProvider<T>(this,saveObjects);
}
public ISaveable<T> Saveable<T>(T saveObject) where T : class, new()
{
return new SaveableProvider<T>(this,saveObject);
}
#endregion
#region DbFirst
public virtual IDbFirst DbFirst
{
get
{
IDbFirst dbFirst = InstanceFactory.GetDbFirst(this.Context.CurrentConnectionConfig);
dbFirst.Context = this.Context;
dbFirst.Init();
return dbFirst;
}
}
#endregion
#region CodeFirst
public virtual ICodeFirst CodeFirst
{
get
{
ICodeFirst codeFirst = InstanceFactory.GetCodeFirst(this.Context.CurrentConnectionConfig);
codeFirst.Context = this.Context;
return codeFirst;
}
}
#endregion
#region Db Maintenance
public virtual IDbMaintenance DbMaintenance
{
get
{
if (this.Context._DbMaintenance == null)
{
IDbMaintenance maintenance = InstanceFactory.GetDbMaintenance(this.Context.CurrentConnectionConfig);
this.Context._DbMaintenance = maintenance;
maintenance.Context = this.Context;
}
return this.Context._DbMaintenance;
}
}
#endregion
#region Entity Maintenance
[Obsolete("Use SqlSugarClient.EntityMaintenance")]
public virtual EntityMaintenance EntityProvider
{
get { return this.Context.EntityMaintenance; }
set { this.Context.EntityMaintenance = value; }
}
public virtual EntityMaintenance EntityMaintenance
{
get
{
if (this.Context._EntityProvider == null)
{
this.Context._EntityProvider = new EntityMaintenance();
this.Context._EntityProvider.Context = this.Context;
}
return this.Context._EntityProvider;
}
set { this.Context._EntityProvider = value; }
}
#endregion
#region Gobal Filter
public virtual QueryFilterProvider QueryFilter
{
get
{
if (this.Context._QueryFilterProvider == null)
{
this.Context._QueryFilterProvider = new QueryFilterProvider();
this.Context._QueryFilterProvider.Context = this.Context;
}
return this.Context._QueryFilterProvider;
}
set { this.Context._QueryFilterProvider = value; }
}
#endregion
#region SimpleClient
[Obsolete("Use SqlSugarClient.GetSimpleClient() Or SqlSugarClient.GetSimpleClient<T>() ")]
public virtual SimpleClient SimpleClient
{
get
{
if (this.Context._SimpleClient == null)
this.Context._SimpleClient = new SimpleClient(this.Context);
return this.Context._SimpleClient;
}
}
public virtual SimpleClient<T> GetSimpleClient<T>() where T : class, new()
{
return new SimpleClient<T>(this.Context);
}
public virtual SimpleClient GetSimpleClient()
{
if (this.Context._SimpleClient == null)
this.Context._SimpleClient = new SimpleClient(this.Context);
return this.Context._SimpleClient;
}
#endregion
#region Dispose OR Close
public virtual void Close()
{
if (this.Context.Ado != null)
this.Context.Ado.Close();
//Context.Utilities.RemoveCacheAll();
//if (this.Context != null && this.Context.Utilities != null)
// this.Context.Utilities.RemoveCacheAll();
}
public virtual void Open()
{
if (this.Context.Ado != null)
this.Context.Ado.Open();
}
public virtual void Dispose()
{
if (this.Context.Ado != null)
this.Context.Ado.Dispose();
}
#endregion
}
}