mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 增加 单条 WhereObject + GenerateCommandParameterWithLambda 参数化;
This commit is contained in:
parent
c0bb06e3ff
commit
934be9cd9f
@ -722,13 +722,5 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Reflection.Assembly[])">
|
|
||||||
<summary>
|
|
||||||
批量注入 Repository,可以参考代码自行调整
|
|
||||||
</summary>
|
|
||||||
<param name="services"></param>
|
|
||||||
<param name="assemblies"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
File diff suppressed because one or more lines are too long
@ -37,7 +37,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_commonExpression = commonExpression;
|
_commonExpression = commonExpression;
|
||||||
_table = _commonUtils.GetTableByEntity(typeof(T1));
|
_table = _commonUtils.GetTableByEntity(typeof(T1));
|
||||||
_isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure;
|
_isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure;
|
||||||
this.Where(_commonUtils.WhereObject(_table, "", dywhere));
|
this.Where(_commonUtils.WhereObject(_table, "", dywhere, _params));
|
||||||
if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||||
}
|
}
|
||||||
@ -118,8 +118,8 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public IDelete<T1> Where(T1 item) => this.Where(new[] { item });
|
public IDelete<T1> Where(T1 item) => this.Where(new[] { item });
|
||||||
public IDelete<T1> Where(IEnumerable<T1> items) => this.Where(_commonUtils.WhereItems(_table.Primarys, "", items, _params));
|
public IDelete<T1> Where(IEnumerable<T1> items) => this.Where(_commonUtils.WhereItems(_table.Primarys, "", items, _params));
|
||||||
public IDelete<T1> WhereDynamic(object dywhere, bool not = false) => not == false ?
|
public IDelete<T1> WhereDynamic(object dywhere, bool not = false) => not == false ?
|
||||||
this.Where(_commonUtils.WhereObject(_table, "", dywhere)) :
|
this.Where(_commonUtils.WhereObject(_table, "", dywhere, _params)) :
|
||||||
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
|
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere, _params)})");
|
||||||
public IDelete<T1> WhereDynamicFilter(DynamicFilterInfo filter)
|
public IDelete<T1> WhereDynamicFilter(DynamicFilterInfo filter)
|
||||||
{
|
{
|
||||||
var alias = "t_" + Guid.NewGuid().ToString("n").Substring(0, 8);
|
var alias = "t_" + Guid.NewGuid().ToString("n").Substring(0, 8);
|
||||||
|
@ -564,7 +564,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_commonUtils = commonUtils;
|
_commonUtils = commonUtils;
|
||||||
_commonExpression = commonExpression;
|
_commonExpression = commonExpression;
|
||||||
_tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T1)), Alias = "a", On = null, Type = SelectTableInfoType.From });
|
_tables.Add(new SelectTableInfo { Table = _commonUtils.GetTableByEntity(typeof(T1)), Alias = "a", On = null, Type = SelectTableInfoType.From });
|
||||||
this.Where(_commonUtils.WhereObject(_tables.First().Table, "a.", dywhere));
|
this.Where(_commonUtils.WhereObject(_tables.First().Table, "a.", dywhere, _params));
|
||||||
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
if (_orm.CodeFirst.IsAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -503,7 +503,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
.Where(oldwhere)
|
.Where(oldwhere)
|
||||||
.WhereIf(string.IsNullOrWhiteSpace(newwhere) == false, $"not({newwhere})");
|
.WhereIf(string.IsNullOrWhiteSpace(newwhere) == false, $"not({newwhere})");
|
||||||
}
|
}
|
||||||
var wheresql = _commonUtils.WhereObject(_tables.First().Table, $"{_tables.First().Alias}.", dywhere);
|
var wheresql = _commonUtils.WhereObject(_tables.First().Table, $"{_tables.First().Alias}.", dywhere, _params);
|
||||||
return not == false ? this.Where(wheresql) : this.Where($"not({wheresql})");
|
return not == false ? this.Where(wheresql) : this.Where($"not({wheresql})");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
_versionColumn = _table?.VersionColumn;
|
_versionColumn = _table?.VersionColumn;
|
||||||
_noneParameter = _orm.CodeFirst.IsNoneCommandParameter;
|
_noneParameter = _orm.CodeFirst.IsNoneCommandParameter;
|
||||||
_isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure;
|
_isAutoSyncStructure = _orm.CodeFirst.IsAutoSyncStructure;
|
||||||
this.Where(_commonUtils.WhereObject(_table, "", dywhere));
|
this.Where(_commonUtils.WhereObject(_table, "", dywhere, _params));
|
||||||
if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
if (_isAutoSyncStructure && typeof(T1) != typeof(object)) _orm.CodeFirst.SyncStructure<T1>();
|
||||||
IgnoreCanUpdate();
|
IgnoreCanUpdate();
|
||||||
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
_whereGlobalFilter = _orm.GlobalFilter.GetFilters();
|
||||||
@ -800,8 +800,8 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public IUpdate<T1> Where(T1 item) => this.Where(new[] { item });
|
public IUpdate<T1> Where(T1 item) => this.Where(new[] { item });
|
||||||
public IUpdate<T1> Where(IEnumerable<T1> items) => this.Where(_commonUtils.WhereItems(_table.Primarys, "", items, _params));
|
public IUpdate<T1> Where(IEnumerable<T1> items) => this.Where(_commonUtils.WhereItems(_table.Primarys, "", items, _params));
|
||||||
public IUpdate<T1> WhereDynamic(object dywhere, bool not = false) => not == false ?
|
public IUpdate<T1> WhereDynamic(object dywhere, bool not = false) => not == false ?
|
||||||
this.Where(_commonUtils.WhereObject(_table, "", dywhere)) :
|
this.Where(_commonUtils.WhereObject(_table, "", dywhere, _params)) :
|
||||||
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
|
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere, _params)})");
|
||||||
public IUpdate<T1> WhereDynamicFilter(DynamicFilterInfo filter)
|
public IUpdate<T1> WhereDynamicFilter(DynamicFilterInfo filter)
|
||||||
{
|
{
|
||||||
var alias = "t_" + Guid.NewGuid().ToString("n").Substring(0, 8);
|
var alias = "t_" + Guid.NewGuid().ToString("n").Substring(0, 8);
|
||||||
|
@ -458,35 +458,53 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
return ret.Values.ToArray();
|
return ret.Values.ToArray();
|
||||||
}
|
}
|
||||||
|
public string WhereObject(TableInfo table, string aliasAndDot, object dywhere, List<DbParameter> dbParams)
|
||||||
public string WhereObject(TableInfo table, string aliasAndDot, object dywhere)
|
|
||||||
{
|
{
|
||||||
|
string LocalGetFilterSql(ColumnInfo[] cols, object[] objs)
|
||||||
|
{
|
||||||
|
string filter = "";
|
||||||
|
var colidx = 0;
|
||||||
|
foreach (var col in cols)
|
||||||
|
{
|
||||||
|
var colval = Utils.GetDataReaderValue(col.Attribute.MapType, objs[colidx]);
|
||||||
|
filter += $"{(colidx > 0 ? " AND " : "")}{aliasAndDot}{this.QuoteSqlName(col.Attribute.Name)} = ";
|
||||||
|
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
||||||
|
{
|
||||||
|
AppendParamter(dbParams, null, col, col.Attribute.MapType, colval);
|
||||||
|
filter += RewriteColumn(col, QuoteWriteParamterAdapter(col.Attribute.MapType, QuoteParamterName($"exp_{dbParams.Count}")));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
filter += RewriteColumn(col, GetNoneParamaterSqlValue(null, null, col, col.Attribute.MapType, colval));
|
||||||
|
++colidx;
|
||||||
|
}
|
||||||
|
return filter;
|
||||||
|
}
|
||||||
|
object LocalGetSingleElement(IEnumerable ie)
|
||||||
|
{
|
||||||
|
var idx = 0;
|
||||||
|
object firstElement = null;
|
||||||
|
foreach (var i in ie)
|
||||||
|
{
|
||||||
|
if (i == null) continue;
|
||||||
|
if (idx == 0) firstElement = i;
|
||||||
|
++idx;
|
||||||
|
if (idx > 1) break;
|
||||||
|
}
|
||||||
|
return idx == 1 ? firstElement : null;
|
||||||
|
}
|
||||||
|
|
||||||
if (dywhere == null) return "";
|
if (dywhere == null) return "";
|
||||||
var type = dywhere.GetType();
|
var type = dywhere.GetType();
|
||||||
var primarys = table.Primarys;
|
var primarys = table.Primarys;
|
||||||
var pk1 = primarys.FirstOrDefault();
|
var pk1 = primarys.FirstOrDefault();
|
||||||
if (primarys.Length == 1 && (type == pk1.CsType || type.IsNumberType() && pk1.CsType.IsNumberType()))
|
if (primarys.Length == 1 && (type == pk1.CsType || type.IsNumberType() && pk1.CsType.IsNumberType()))
|
||||||
{
|
return LocalGetFilterSql(primarys, new object[] { dywhere });
|
||||||
return $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, dywhere)))}";
|
if (primarys.Length > 0 && (type == table.Type || type.BaseType == table.Type))
|
||||||
}
|
return LocalGetFilterSql(primarys, primarys.Select(pk => pk.GetDbValue(dywhere)).ToArray());
|
||||||
else if (primarys.Length > 0 && (type == table.Type || type.BaseType == table.Type))
|
if (primarys.Length == 1 && type == typeof(string))
|
||||||
{
|
return LocalGetFilterSql(primarys, new object[] { dywhere });
|
||||||
var sb = new StringBuilder();
|
|
||||||
var pkidx = 0;
|
if (primarys.Length == 1 && dywhere is IEnumerable)
|
||||||
foreach (var pk in primarys)
|
|
||||||
{
|
|
||||||
if (pkidx > 0) sb.Append(" AND ");
|
|
||||||
sb.Append(aliasAndDot).Append(this.QuoteSqlName(pk.Attribute.Name)).Append(" = ");
|
|
||||||
sb.Append(RewriteColumn(pk, GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pk.GetDbValue(dywhere))));
|
|
||||||
++pkidx;
|
|
||||||
}
|
|
||||||
return sb.ToString();
|
|
||||||
}
|
|
||||||
else if (primarys.Length == 1 && type == typeof(string))
|
|
||||||
{
|
|
||||||
return $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, dywhere)))}";
|
|
||||||
}
|
|
||||||
else if (primarys.Length == 1 && dywhere is IEnumerable)
|
|
||||||
{
|
{
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var ie = dywhere as IEnumerable;
|
var ie = dywhere as IEnumerable;
|
||||||
@ -509,25 +527,27 @@ namespace FreeSql.Internal
|
|||||||
idx = 1;
|
idx = 1;
|
||||||
}
|
}
|
||||||
if (idx > 1) sb.Append(",");
|
if (idx > 1) sb.Append(",");
|
||||||
var val = isEntityType ? RewriteColumn(primarys[0], GetNoneParamaterSqlValue(null, null, primarys[0], primarys[0].Attribute.MapType, primarys[0].GetDbValue(i))) :
|
var pkval = isEntityType ? pk1.GetDbValue(i) : i;
|
||||||
RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, Utils.GetDataReaderValue(pk1.Attribute.MapType, i)));
|
if (ieidx == 0) ieidx1ret = LocalGetFilterSql(new[] { pk1 }, new object[] { pkval });
|
||||||
sb.Append(val);
|
sb.Append(RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, pkval)));
|
||||||
if (ieidx == 0) ieidx1ret = $"{aliasAndDot}{this.QuoteSqlName(pk1.Attribute.Name)} = {val}";
|
++ieidx;
|
||||||
ieidx++;
|
|
||||||
}
|
}
|
||||||
if (ieidx == 0) return "";
|
if (ieidx == 0) return "";
|
||||||
if (ieidx == 1) return ieidx1ret;
|
if (ieidx == 1) return ieidx1ret;
|
||||||
sb.Append(')');
|
sb.Append(')');
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
else if (dywhere is IEnumerable)
|
if (dywhere is IEnumerable)
|
||||||
{
|
{
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
var ie = dywhere as IEnumerable;
|
var ie = dywhere as IEnumerable;
|
||||||
|
var ieSingle = LocalGetSingleElement(ie);
|
||||||
|
if (ieSingle != null) return WhereObject(table, aliasAndDot, ieSingle, dbParams);
|
||||||
var ieidx = 0;
|
var ieidx = 0;
|
||||||
foreach (var i in ie)
|
foreach (var i in ie)
|
||||||
{
|
{
|
||||||
var fw = WhereObject(table, aliasAndDot, i);
|
var fw = WhereObject(table, aliasAndDot, i, dbParams);
|
||||||
if (string.IsNullOrEmpty(fw)) continue;
|
if (string.IsNullOrEmpty(fw)) continue;
|
||||||
if (ieidx > 0) sb.Append(" OR ");
|
if (ieidx > 0) sb.Append(" OR ");
|
||||||
sb.Append(fw);
|
sb.Append(fw);
|
||||||
@ -547,8 +567,7 @@ namespace FreeSql.Internal
|
|||||||
if (trycol == null) continue;
|
if (trycol == null) continue;
|
||||||
|
|
||||||
if (psidx > 0) sb.Append(" AND ");
|
if (psidx > 0) sb.Append(" AND ");
|
||||||
sb.Append(aliasAndDot).Append(this.QuoteSqlName(trycol.Attribute.Name)).Append(" = ");
|
sb.Append(LocalGetFilterSql(new[] { trycol }, new object[] { p.GetValue(dywhere, null) }));
|
||||||
sb.Append(RewriteColumn(trycol, GetNoneParamaterSqlValue(null, null, trycol, trycol.Attribute.MapType, Utils.GetDataReaderValue(trycol.Attribute.MapType, p.GetValue(dywhere, null)))));
|
|
||||||
++psidx;
|
++psidx;
|
||||||
}
|
}
|
||||||
if (psidx == 0) return "";
|
if (psidx == 0) return "";
|
||||||
@ -574,9 +593,10 @@ namespace FreeSql.Internal
|
|||||||
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
||||||
{
|
{
|
||||||
AppendParamter(dbParams, null, primarys[0], primarys[0].Attribute.MapType, pkval);
|
AppendParamter(dbParams, null, primarys[0], primarys[0].Attribute.MapType, pkval);
|
||||||
filter += QuoteWriteParamterAdapter(primarys[0].Attribute.MapType, QuoteParamterName($"exp_{dbParams.Count}"));
|
filter += RewriteColumn(pk, QuoteWriteParamterAdapter(primarys[0].Attribute.MapType, QuoteParamterName($"exp_{dbParams.Count}")));
|
||||||
}
|
}
|
||||||
filter += RewriteColumn(pk, GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pkval));
|
else
|
||||||
|
filter += RewriteColumn(pk, GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pkval));
|
||||||
}
|
}
|
||||||
return primarys.Length > 1 ? filter.Remove(0, 5) : filter;
|
return primarys.Length > 1 ? filter.Remove(0, 5) : filter;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user