mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-22 20:13:41 +08:00
Update Core
This commit is contained in:
@@ -409,9 +409,9 @@ namespace SqlSugar
|
|||||||
var sqlCommand = GetCommand(sql, parameters);
|
var sqlCommand = GetCommand(sql, parameters);
|
||||||
int count;
|
int count;
|
||||||
if (this.CancellationToken == null)
|
if (this.CancellationToken == null)
|
||||||
count = await sqlCommand.ExecuteNonQueryAsync();
|
count=await sqlCommand.ExecuteNonQueryAsync();
|
||||||
else
|
else
|
||||||
count = await sqlCommand.ExecuteNonQueryAsync(this.CancellationToken.Value);
|
count=await sqlCommand.ExecuteNonQueryAsync(this.CancellationToken.Value);
|
||||||
if (this.IsClearParameters)
|
if (this.IsClearParameters)
|
||||||
sqlCommand.Parameters.Clear();
|
sqlCommand.Parameters.Clear();
|
||||||
ExecuteAfter(sql, parameters);
|
ExecuteAfter(sql, parameters);
|
||||||
@@ -446,10 +446,10 @@ namespace SqlSugar
|
|||||||
ExecuteBefore(sql, parameters);
|
ExecuteBefore(sql, parameters);
|
||||||
var sqlCommand = GetCommand(sql, parameters);
|
var sqlCommand = GetCommand(sql, parameters);
|
||||||
DbDataReader sqlDataReader;
|
DbDataReader sqlDataReader;
|
||||||
if (this.CancellationToken == null)
|
if(this.CancellationToken==null)
|
||||||
sqlDataReader = await sqlCommand.ExecuteReaderAsync(this.IsAutoClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default);
|
sqlDataReader=await sqlCommand.ExecuteReaderAsync(this.IsAutoClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default);
|
||||||
else
|
else
|
||||||
sqlDataReader = await sqlCommand.ExecuteReaderAsync(this.IsAutoClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default, this.CancellationToken.Value);
|
sqlDataReader=await sqlCommand.ExecuteReaderAsync(this.IsAutoClose() ? CommandBehavior.CloseConnection : CommandBehavior.Default,this.CancellationToken.Value);
|
||||||
if (isSp)
|
if (isSp)
|
||||||
DataReaderParameters = sqlCommand.Parameters;
|
DataReaderParameters = sqlCommand.Parameters;
|
||||||
if (this.IsClearParameters)
|
if (this.IsClearParameters)
|
||||||
@@ -482,8 +482,8 @@ namespace SqlSugar
|
|||||||
ExecuteBefore(sql, parameters);
|
ExecuteBefore(sql, parameters);
|
||||||
var sqlCommand = GetCommand(sql, parameters);
|
var sqlCommand = GetCommand(sql, parameters);
|
||||||
object scalar;
|
object scalar;
|
||||||
if (CancellationToken == null)
|
if(CancellationToken==null)
|
||||||
scalar = await sqlCommand.ExecuteScalarAsync();
|
scalar=await sqlCommand.ExecuteScalarAsync();
|
||||||
else
|
else
|
||||||
scalar = await sqlCommand.ExecuteScalarAsync(this.CancellationToken.Value);
|
scalar = await sqlCommand.ExecuteScalarAsync(this.CancellationToken.Value);
|
||||||
//scalar = (scalar == null ? 0 : scalar);
|
//scalar = (scalar == null ? 0 : scalar);
|
||||||
@@ -898,7 +898,7 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
public async Task<Tuple<List<T>, List<T2>, List<T3>, List<T4>, List<T5>, List<T6>>> SqlQueryAsync<T, T2, T3, T4, T5, T6>(string sql, object parameters = null)
|
public async Task<Tuple<List<T>, List<T2>, List<T3>, List<T4>, List<T5>, List<T6>>> SqlQueryAsync<T, T2, T3, T4, T5, T6>(string sql, object parameters = null)
|
||||||
{
|
{
|
||||||
var result = await SqlQueryAsync<T, T2, T3, T4, T5, T6, object>(sql, parameters);
|
var result =await SqlQueryAsync<T, T2, T3, T4, T5, T6, object>(sql, parameters);
|
||||||
return new Tuple<List<T>, List<T2>, List<T3>, List<T4>, List<T5>, List<T6>>(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5, result.Item6);
|
return new Tuple<List<T>, List<T2>, List<T3>, List<T4>, List<T5>, List<T6>>(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5, result.Item6);
|
||||||
}
|
}
|
||||||
public async Task<Tuple<List<T>, List<T2>, List<T3>, List<T4>, List<T5>, List<T6>, List<T7>>> SqlQueryAsync<T, T2, T3, T4, T5, T6, T7>(string sql, object parameters = null)
|
public async Task<Tuple<List<T>, List<T2>, List<T3>, List<T4>, List<T5>, List<T6>, List<T7>>> SqlQueryAsync<T, T2, T3, T4, T5, T6, T7>(string sql, object parameters = null)
|
||||||
@@ -915,7 +915,7 @@ namespace SqlSugar
|
|||||||
List<T> result = new List<T>();
|
List<T> result = new List<T>();
|
||||||
if (DbReader.HasRows)
|
if (DbReader.HasRows)
|
||||||
{
|
{
|
||||||
result = await GetDataAsync<T>(typeof(T), dataReader);
|
result =await GetDataAsync<T>(typeof(T), dataReader);
|
||||||
}
|
}
|
||||||
List<T2> result2 = null;
|
List<T2> result2 = null;
|
||||||
if (NextResult(dataReader))
|
if (NextResult(dataReader))
|
||||||
@@ -1196,7 +1196,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
return dataReader.NextResult();
|
return dataReader.NextResult();
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1361,7 +1361,7 @@ namespace SqlSugar
|
|||||||
if (item.Value != null)
|
if (item.Value != null)
|
||||||
{
|
{
|
||||||
var type = item.Value.GetType();
|
var type = item.Value.GetType();
|
||||||
if ((type != UtilConstants.ByteArrayType && type.IsArray && item.IsArray == false) || type.FullName.IsCollectionsList())
|
if ((type != UtilConstants.ByteArrayType && type.IsArray&&item.IsArray==false) || type.FullName.IsCollectionsList())
|
||||||
{
|
{
|
||||||
var newValues = new List<string>();
|
var newValues = new List<string>();
|
||||||
foreach (var inValute in item.Value as IEnumerable)
|
foreach (var inValute in item.Value as IEnumerable)
|
||||||
@@ -1378,7 +1378,7 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
if (item.ParameterName.Substring(0, 1) != this.SqlParameterKeyWord)
|
if (item.ParameterName.Substring(0, 1) != this.SqlParameterKeyWord)
|
||||||
{
|
{
|
||||||
sql = sql.Replace(this.SqlParameterKeyWord + item.ParameterName, newValues.ToArray().ToJoinSqlInVals());
|
sql = sql.Replace(this.SqlParameterKeyWord+item.ParameterName, newValues.ToArray().ToJoinSqlInVals());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1416,7 +1416,7 @@ namespace SqlSugar
|
|||||||
List<TResult> result;
|
List<TResult> result;
|
||||||
if (entityType == UtilConstants.DynamicType)
|
if (entityType == UtilConstants.DynamicType)
|
||||||
{
|
{
|
||||||
result = await this.Context.Utilities.DataReaderToExpandoObjectListAsyncNoUsing(dataReader) as List<TResult>;
|
result =await this.Context.Utilities.DataReaderToExpandoObjectListAsyncNoUsing(dataReader) as List<TResult>;
|
||||||
}
|
}
|
||||||
else if (entityType == UtilConstants.ObjType)
|
else if (entityType == UtilConstants.ObjType)
|
||||||
{
|
{
|
||||||
@@ -1425,11 +1425,11 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
else if (entityType.IsAnonymousType())
|
else if (entityType.IsAnonymousType())
|
||||||
{
|
{
|
||||||
result = await this.Context.Utilities.DataReaderToListAsyncNoUsing<TResult>(dataReader);
|
result =await this.Context.Utilities.DataReaderToListAsyncNoUsing<TResult>(dataReader);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = await this.Context.Ado.DbBind.DataReaderToListNoUsingAsync<TResult>(entityType, dataReader);
|
result =await this.Context.Ado.DbBind.DataReaderToListNoUsingAsync<TResult>(entityType, dataReader);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@@ -332,6 +332,8 @@ namespace SqlSugar
|
|||||||
if (bindProperyTypeName == "datetime")
|
if (bindProperyTypeName == "datetime")
|
||||||
method = isNullableType ? getConvertdatetimeoffsetDate : getdatetimeoffsetDate;
|
method = isNullableType ? getConvertdatetimeoffsetDate : getdatetimeoffsetDate;
|
||||||
break;
|
break;
|
||||||
|
case CSharpDataType.Single:
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
method = getConvertValueMethod.MakeGenericMethod(bindPropertyType);
|
method = getConvertValueMethod.MakeGenericMethod(bindPropertyType);
|
||||||
break;
|
break;
|
||||||
|
@@ -101,7 +101,7 @@ namespace SqlSugar
|
|||||||
if (this.Context.CurrentConnectionConfig.ConfigureExternalServices?.RazorService != null)
|
if (this.Context.CurrentConnectionConfig.ConfigureExternalServices?.RazorService != null)
|
||||||
{
|
{
|
||||||
List<RazorTableInfo> razorList = new List<RazorTableInfo>();
|
List<RazorTableInfo> razorList = new List<RazorTableInfo>();
|
||||||
var tables = this.Context.DbMaintenance.GetTableInfoList(false);
|
var tables = this.TableInfoList;
|
||||||
if (tables.HasValue())
|
if (tables.HasValue())
|
||||||
{
|
{
|
||||||
foreach (var item in tables)
|
foreach (var item in tables)
|
||||||
|
@@ -308,6 +308,12 @@ namespace SqlSugar
|
|||||||
this.Context.Ado.ExecuteCommand(sql);
|
this.Context.Ado.ExecuteCommand(sql);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
public virtual bool CreateUniqueIndex(string tableName, string[] columnNames)
|
||||||
|
{
|
||||||
|
string sql = string.Format(CreateIndexSql, tableName, string.Join(",", columnNames), string.Join("_", columnNames)+"_Unique","UNIQUE" );
|
||||||
|
this.Context.Ado.ExecuteCommand(sql);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
public virtual bool IsAnyIndex(string indexName)
|
public virtual bool IsAnyIndex(string indexName)
|
||||||
{
|
{
|
||||||
string sql = string.Format(this.IsAnyIndexSql, indexName);
|
string sql = string.Format(this.IsAnyIndexSql, indexName);
|
||||||
@@ -369,6 +375,22 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var uIndexColumns = columns.Where(it => it.UIndexGroupNameList.HasValue()).ToList();
|
||||||
|
if (uIndexColumns.HasValue())
|
||||||
|
{
|
||||||
|
var groups = uIndexColumns.SelectMany(it => it.UIndexGroupNameList).GroupBy(it => it).Select(it => it.Key).ToList();
|
||||||
|
foreach (var item in groups)
|
||||||
|
{
|
||||||
|
var columnNames = uIndexColumns.Where(it => it.UIndexGroupNameList.Any(i => i.Equals(item, StringComparison.CurrentCultureIgnoreCase))).Select(it => it.DbColumnName).ToArray();
|
||||||
|
var indexName = string.Format("Index_{0}_{1}_Unique", entityInfo.DbTableName, string.Join("_", columnNames));
|
||||||
|
if (!IsAnyIndex(indexName))
|
||||||
|
{
|
||||||
|
CreateUniqueIndex(entityInfo.DbTableName, columnNames);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool IsAnyDefaultValue(string tableName, string columnName,List<DbColumnInfo> columns)
|
protected virtual bool IsAnyDefaultValue(string tableName, string columnName,List<DbColumnInfo> columns)
|
||||||
|
@@ -193,7 +193,7 @@ namespace SqlSugar
|
|||||||
column.NoSerialize = sugarColumn.NoSerialize;
|
column.NoSerialize = sugarColumn.NoSerialize;
|
||||||
column.DefaultValue = sugarColumn.DefaultValue;
|
column.DefaultValue = sugarColumn.DefaultValue;
|
||||||
column.IndexGroupNameList = sugarColumn.IndexGroupNameList;
|
column.IndexGroupNameList = sugarColumn.IndexGroupNameList;
|
||||||
column.UIndexGroupNameList = sugarColumn.UIndexGroupNameList;
|
column.UIndexGroupNameList = sugarColumn.UniqueGroupNameList;
|
||||||
column.IsOnlyIgnoreUpdate = sugarColumn.IsOnlyIgnoreUpdate;
|
column.IsOnlyIgnoreUpdate = sugarColumn.IsOnlyIgnoreUpdate;
|
||||||
column.IsArray = sugarColumn.IsArray;
|
column.IsArray = sugarColumn.IsArray;
|
||||||
}
|
}
|
||||||
|
@@ -640,7 +640,7 @@ namespace SqlSugar
|
|||||||
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
||||||
addItem.Value = row[col.ColumnName];
|
addItem.Value = row[col.ColumnName];
|
||||||
addItem.ColumnName = col.ColumnName;
|
addItem.ColumnName = col.ColumnName;
|
||||||
addItem.ColumnDescription = this.EntityInfo.Columns.First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
addItem.ColumnDescription = this.EntityInfo.Columns.Where(it=>it.DbColumnName!=null).First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
||||||
item.Columns.Add(addItem);
|
item.Columns.Add(addItem);
|
||||||
}
|
}
|
||||||
result.Add(item);
|
result.Add(item);
|
||||||
|
@@ -783,6 +783,38 @@ namespace SqlSugar
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Dictionary<string, object> ToDictionary(Expression<Func<T, object>> key, Expression<Func<T, object>> value)
|
||||||
|
{
|
||||||
|
var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString();
|
||||||
|
var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString();
|
||||||
|
var result = this.Select<KeyValuePair<string, object>>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public async Task<Dictionary<string, object>> ToDictionaryAsync(Expression<Func<T, object>> key, Expression<Func<T, object>> value)
|
||||||
|
{
|
||||||
|
var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle);
|
||||||
|
var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle);
|
||||||
|
var list = await this.Select<KeyValuePair<string, object>>(keyName + "," + valueName).ToListAsync();
|
||||||
|
var result =list.ToDictionary(it => it.Key.ObjToString(), it => it.Value);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public List<Dictionary<string, object>> ToDictionaryList()
|
||||||
|
{
|
||||||
|
var list = this.ToList();
|
||||||
|
if (list == null)
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return this.Context.Utilities.DeserializeObject<List<Dictionary<string, object>>>(this.Context.Utilities.SerializeObject(list));
|
||||||
|
}
|
||||||
|
public async Task<List<Dictionary<string, object>>> ToDictionaryListAsync()
|
||||||
|
{
|
||||||
|
var list =await this.ToListAsync();
|
||||||
|
if (list == null)
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return this.Context.Utilities.DeserializeObject<List<Dictionary<string, object>>>(this.Context.Utilities.SerializeObject(list));
|
||||||
|
}
|
||||||
|
|
||||||
public virtual List<T> ToList()
|
public virtual List<T> ToList()
|
||||||
{
|
{
|
||||||
InitMapping();
|
InitMapping();
|
||||||
@@ -1958,7 +1990,27 @@ namespace SqlSugar
|
|||||||
protected void CopyQueryBuilder(QueryBuilder asyncQueryableBuilder)
|
protected void CopyQueryBuilder(QueryBuilder asyncQueryableBuilder)
|
||||||
{
|
{
|
||||||
var pars = new List<SugarParameter>();
|
var pars = new List<SugarParameter>();
|
||||||
pars.AddRange(this.QueryBuilder.Parameters);
|
if (this.QueryBuilder.Parameters != null)
|
||||||
|
{
|
||||||
|
pars=this.QueryBuilder.Parameters.Select(it=>new SugarParameter(it.ParameterName,it.Value) {
|
||||||
|
DbType=it.DbType,
|
||||||
|
Value=it.Value,
|
||||||
|
ParameterName=it.ParameterName,
|
||||||
|
Direction=it.Direction,
|
||||||
|
IsArray=it.IsArray,
|
||||||
|
IsJson=it.IsJson,
|
||||||
|
IsNullable=it.IsNullable,
|
||||||
|
IsRefCursor=it.IsRefCursor,
|
||||||
|
Size=it.Size,
|
||||||
|
SourceColumn=it.SourceColumn,
|
||||||
|
SourceColumnNullMapping=it.SourceColumnNullMapping,
|
||||||
|
SourceVersion=it.SourceVersion,
|
||||||
|
TempDate=it.TempDate,
|
||||||
|
TypeName=it.TypeName,
|
||||||
|
UdtTypeName=it.UdtTypeName,
|
||||||
|
_Size=it._Size
|
||||||
|
}).ToList();
|
||||||
|
}
|
||||||
asyncQueryableBuilder.Take = this.QueryBuilder.Take;
|
asyncQueryableBuilder.Take = this.QueryBuilder.Take;
|
||||||
asyncQueryableBuilder.Skip = this.QueryBuilder.Skip;
|
asyncQueryableBuilder.Skip = this.QueryBuilder.Skip;
|
||||||
asyncQueryableBuilder.SelectValue = this.QueryBuilder.SelectValue;
|
asyncQueryableBuilder.SelectValue = this.QueryBuilder.SelectValue;
|
||||||
|
@@ -5,7 +5,7 @@ using System.Linq;
|
|||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
{
|
{
|
||||||
public class InsertBuilder : IDMLBuilder
|
public partial class InsertBuilder : IDMLBuilder
|
||||||
{
|
{
|
||||||
#region Init
|
#region Init
|
||||||
public InsertBuilder()
|
public InsertBuilder()
|
||||||
|
@@ -183,7 +183,7 @@ namespace SqlSugar
|
|||||||
break;
|
break;
|
||||||
case ConditionalType.NoLike:
|
case ConditionalType.NoLike:
|
||||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), " NOT LIKE", parameterName);
|
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), " NOT LIKE", parameterName);
|
||||||
parameters.Add(new SugarParameter(parameterName, item.FieldValue + "%"));
|
parameters.Add(new SugarParameter(parameterName, "%" + item.FieldValue + "%"));
|
||||||
break;
|
break;
|
||||||
case ConditionalType.LikeRight:
|
case ConditionalType.LikeRight:
|
||||||
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
|
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
|
||||||
|
@@ -444,6 +444,61 @@ namespace SqlSugar
|
|||||||
|
|
||||||
return queryable;
|
return queryable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public virtual ISugarQueryable<T, T2 ,T3> Queryable<T, T2 ,T3>(
|
||||||
|
ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3,
|
||||||
|
JoinType joinType1, Expression<Func<T, T2, T3, bool>> joinExpression1 ,
|
||||||
|
JoinType joinType2 , Expression<Func<T, T2, T3,bool>> joinExpression2
|
||||||
|
) where T : class, new() where T2 : class, new() where T3 : 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'");
|
||||||
|
Check.Exception(joinQueryable3.QueryBuilder.Take != null || joinQueryable3.QueryBuilder.Skip != null || joinQueryable3.QueryBuilder.OrderByValue.HasValue(), "joinQueryable3 Cannot have 'Skip' 'ToPageList' 'Take' Or 'OrderBy'");
|
||||||
|
|
||||||
|
var sqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig);
|
||||||
|
|
||||||
|
sqlBuilder.Context = this;
|
||||||
|
InitMappingInfo<T, T2,T3>();
|
||||||
|
var types = new Type[] { typeof(T2) };
|
||||||
|
var queryable = InstanceFactory.GetQueryable<T, T2,T3>(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;
|
||||||
|
queryable.QueryBuilder.EntityType = typeof(T);
|
||||||
|
queryable.QueryBuilder.LambdaExpressions = InstanceFactory.GetLambdaExpressions(this.CurrentConnectionConfig);
|
||||||
|
|
||||||
|
//master
|
||||||
|
var shortName1 = joinExpression1.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 = joinExpression1.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(joinExpression1, ResolveExpressType.WhereMultiple);
|
||||||
|
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 0, JoinType = joinType1, JoinWhere = exp.GetResultString(), TableName = sqlBuilder.GetPackTable(sql2, shortName2) });
|
||||||
|
|
||||||
|
|
||||||
|
//join table 2
|
||||||
|
var shortName3 = joinExpression1.Parameters[2].Name;
|
||||||
|
var sqlObj3 = joinQueryable3.ToSql();
|
||||||
|
string sql3 = sqlObj3.Key;
|
||||||
|
UtilMethods.RepairReplicationParameters(ref sql3, sqlObj3.Value.ToArray(), 2, "Join");
|
||||||
|
queryable.QueryBuilder.Parameters.AddRange(sqlObj3.Value);
|
||||||
|
var exp2 = queryable.QueryBuilder.GetExpressionValue(joinExpression2, ResolveExpressType.WhereMultiple);
|
||||||
|
queryable.QueryBuilder.JoinQueryInfos.Add(new JoinQueryInfo() { JoinIndex = 1, JoinType = joinType2, JoinWhere = exp2.GetResultString(), TableName = sqlBuilder.GetPackTable(sql3, shortName3) });
|
||||||
|
return queryable;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
|
public virtual ISugarQueryable<T> UnionAll<T>(params ISugarQueryable<T>[] queryables) where T : class, new()
|
||||||
|
@@ -745,7 +745,7 @@ namespace SqlSugar
|
|||||||
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
|
||||||
addItem.Value = row[col.ColumnName];
|
addItem.Value = row[col.ColumnName];
|
||||||
addItem.ColumnName = col.ColumnName;
|
addItem.ColumnName = col.ColumnName;
|
||||||
addItem.ColumnDescription = this.EntityInfo.Columns.First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
addItem.ColumnDescription = this.EntityInfo.Columns.Where(it=>it.DbColumnName!=null).First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
|
||||||
item.Columns.Add(addItem);
|
item.Columns.Add(addItem);
|
||||||
}
|
}
|
||||||
result.Add(item);
|
result.Add(item);
|
||||||
|
@@ -171,7 +171,7 @@ namespace SqlSugar
|
|||||||
set { _IndexGroupNameList = value; }
|
set { _IndexGroupNameList = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public string[] UIndexGroupNameList { get; set; }
|
public string[] UniqueGroupNameList { get; set; }
|
||||||
|
|
||||||
private bool _IsArray;
|
private bool _IsArray;
|
||||||
public bool IsArray
|
public bool IsArray
|
||||||
|
@@ -512,6 +512,10 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
name = "To" + TempParseType.Name;
|
name = "To" + TempParseType.Name;
|
||||||
}
|
}
|
||||||
|
else if (name == "IsNullOrWhiteSpace")
|
||||||
|
{
|
||||||
|
name = "IsNullOrEmpty";
|
||||||
|
}
|
||||||
switch (name)
|
switch (name)
|
||||||
{
|
{
|
||||||
case "IIF":
|
case "IIF":
|
||||||
@@ -696,6 +700,10 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (expression.Method.Name == "IsNullOrWhiteSpace" && expression.Method.DeclaringType == UtilConstants.StringType)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (expression.Method.ReflectedType().FullName != ExpressionConst.SqlFuncFullName)
|
if (expression.Method.ReflectedType().FullName != ExpressionConst.SqlFuncFullName)
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
|
@@ -286,6 +286,10 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
result.Add(name, DeserializeObject<List<Dictionary<string, object>>>(readerValues[item.Name.ToLower()].ToString()));
|
result.Add(name, DeserializeObject<List<Dictionary<string, object>>>(readerValues[item.Name.ToLower()].ToString()));
|
||||||
}
|
}
|
||||||
|
else if (IsBytes(readerValues, item))
|
||||||
|
{
|
||||||
|
result.Add(name,(byte[])readerValues[item.Name.ToLower()]);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval));
|
result.Add(name, DataReaderToDynamicList_Part(readerValues, item, reval));
|
||||||
@@ -335,6 +339,14 @@ namespace SqlSugar
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsBytes(Dictionary<string, object> readerValues, PropertyInfo item)
|
||||||
|
{
|
||||||
|
return item.PropertyType == UtilConstants.ByteArrayType &&
|
||||||
|
readerValues.ContainsKey(item.Name.ToLower())&&
|
||||||
|
(readerValues[item.Name.ToLower()]==null||
|
||||||
|
readerValues[item.Name.ToLower()].GetType()==UtilConstants.ByteArrayType);
|
||||||
|
}
|
||||||
|
|
||||||
private static bool IsJsonItem(Dictionary<string, object> readerValues, string name)
|
private static bool IsJsonItem(Dictionary<string, object> readerValues, string name)
|
||||||
{
|
{
|
||||||
return readerValues != null &&
|
return readerValues != null &&
|
||||||
|
@@ -122,6 +122,12 @@ namespace SqlSugar
|
|||||||
Task<TResult> AvgAsync<TResult>(Expression<Func<T, TResult>> expression);
|
Task<TResult> AvgAsync<TResult>(Expression<Func<T, TResult>> expression);
|
||||||
|
|
||||||
List<T> ToList();
|
List<T> ToList();
|
||||||
|
|
||||||
|
Dictionary<string, object> ToDictionary(Expression<Func<T, object>> key, Expression<Func<T, object>> value);
|
||||||
|
Task<Dictionary<string, object>> ToDictionaryAsync(Expression<Func<T, object>> key, Expression<Func<T, object>> value);
|
||||||
|
List<Dictionary<string, object>> ToDictionaryList();
|
||||||
|
Task<List<Dictionary<string, object>>> ToDictionaryListAsync();
|
||||||
|
|
||||||
T[] ToArray();
|
T[] ToArray();
|
||||||
Task<List<T>> ToListAsync();
|
Task<List<T>> ToListAsync();
|
||||||
|
|
||||||
|
@@ -102,6 +102,14 @@ namespace SqlSugar
|
|||||||
ISugarQueryable<T, T2> Queryable<T, T2>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, JoinType joinType, Expression<Func<T, T2, bool>> joinExpression)
|
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 T : class, new()
|
||||||
where T2 : class, new();
|
where T2 : class, new();
|
||||||
|
|
||||||
|
ISugarQueryable<T, T2, T3> Queryable<T, T2, T3>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3,
|
||||||
|
JoinType joinType1, Expression<Func<T, T2,T3, bool>> joinExpression1,
|
||||||
|
JoinType joinType2, Expression<Func<T, T2,T3, bool>> joinExpression2)
|
||||||
|
where T: class, new()
|
||||||
|
where T2 : class, new()
|
||||||
|
where T3 : class, new();
|
||||||
|
|
||||||
ISugarQueryable<T> Queryable<T>();
|
ISugarQueryable<T> Queryable<T>();
|
||||||
ISugarQueryable<T> Queryable<T>(ISugarQueryable<T> queryable) where T : class, new();
|
ISugarQueryable<T> Queryable<T>(ISugarQueryable<T> queryable) where T : class, new();
|
||||||
ISugarQueryable<T> Queryable<T>(string shortName);
|
ISugarQueryable<T> Queryable<T>(string shortName);
|
||||||
|
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace SqlSugar
|
namespace SqlSugar
|
||||||
{
|
{
|
||||||
public interface IInsertable<T>
|
public partial interface IInsertable<T>
|
||||||
{
|
{
|
||||||
InsertBuilder InsertBuilder { get; set; }
|
InsertBuilder InsertBuilder { get; set; }
|
||||||
int ExecuteCommand();
|
int ExecuteCommand();
|
||||||
|
@@ -102,6 +102,9 @@ namespace SqlSugar
|
|||||||
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.@Guid),
|
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.@Guid),
|
||||||
new KeyValuePair<string, CSharpDataType>("varchar2",CSharpDataType.@string),
|
new KeyValuePair<string, CSharpDataType>("varchar2",CSharpDataType.@string),
|
||||||
new KeyValuePair<string, CSharpDataType>("nvarchar2",CSharpDataType.@string),
|
new KeyValuePair<string, CSharpDataType>("nvarchar2",CSharpDataType.@string),
|
||||||
|
new KeyValuePair<string, CSharpDataType>("longvarchar",CSharpDataType.@string),
|
||||||
|
|
||||||
|
|
||||||
new KeyValuePair<string, CSharpDataType>("char",CSharpDataType.@string),
|
new KeyValuePair<string, CSharpDataType>("char",CSharpDataType.@string),
|
||||||
new KeyValuePair<string, CSharpDataType>("nchar",CSharpDataType.@string),
|
new KeyValuePair<string, CSharpDataType>("nchar",CSharpDataType.@string),
|
||||||
new KeyValuePair<string, CSharpDataType>("clob",CSharpDataType.@string),
|
new KeyValuePair<string, CSharpDataType>("clob",CSharpDataType.@string),
|
||||||
|
@@ -307,6 +307,18 @@ namespace SqlSugar
|
|||||||
return this.Context.Queryable(joinQueryable1, joinQueryable2, joinType, joinExpression);
|
return this.Context.Queryable(joinQueryable1, joinQueryable2, joinType, joinExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ISugarQueryable<T, T2, T3> Queryable<T, T2,T3>(ISugarQueryable<T> joinQueryable1, ISugarQueryable<T2> joinQueryable2, ISugarQueryable<T3> joinQueryable3,
|
||||||
|
JoinType joinType1, Expression<Func<T, T2,T3, bool>> joinExpression1,
|
||||||
|
JoinType joinType2, Expression<Func<T, T2,T3, bool>> joinExpression2)
|
||||||
|
where T : class, new()
|
||||||
|
where T2 : class, new()
|
||||||
|
where T3 : class, new()
|
||||||
|
{
|
||||||
|
return this.Context.Queryable(joinQueryable1, joinQueryable2,joinQueryable3, joinType1, joinExpression1,joinType2,joinExpression2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public ISugarQueryable<T> Queryable<T>()
|
public ISugarQueryable<T> Queryable<T>()
|
||||||
{
|
{
|
||||||
return this.Context.Queryable<T>();
|
return this.Context.Queryable<T>();
|
||||||
|
Reference in New Issue
Block a user