mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 增加 单条 WhereItems + GenerateCommandParameterWithLambda 参数化;
This commit is contained in:
parent
d8965d5749
commit
c0bb06e3ff
@ -581,7 +581,7 @@ namespace FreeSql.Extensions.ZeroEntity
|
|||||||
{
|
{
|
||||||
var alias = _tableAlias.Where(a => a.Table == _tables[_mainTableIndex]).FirstOrDefault()?.Alias;
|
var alias = _tableAlias.Where(a => a.Table == _tables[_mainTableIndex]).FirstOrDefault()?.Alias;
|
||||||
if (!string.IsNullOrWhiteSpace(alias)) alias = $"{alias}.";
|
if (!string.IsNullOrWhiteSpace(alias)) alias = $"{alias}.";
|
||||||
var where = _common.WhereItems(_tables[_mainTableIndex].Primarys, alias, items);
|
var where = _common.WhereItems(_tables[_mainTableIndex].Primarys, alias, items, _selectProvider._params);
|
||||||
_select.Where(where);
|
_select.Where(where);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -951,7 +951,7 @@ ManyToMany 级联删除中间表(注意不删除外部根)
|
|||||||
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
for (var a = tracking.DeleteLog.Count - 1; a >= 0; a--)
|
||||||
{
|
{
|
||||||
var del = _orm.Delete<object>().WithTransaction(_transaction).CommandTimeout(_commandTimeout).AsTable(tracking.DeleteLog[a].Item1.DbName);
|
var del = _orm.Delete<object>().WithTransaction(_transaction).CommandTimeout(_commandTimeout).AsTable(tracking.DeleteLog[a].Item1.DbName);
|
||||||
var where = (del as DeleteProvider)._commonUtils.WhereItems(tracking.DeleteLog[a].Item1.Primarys, "", tracking.DeleteLog[a].Item2);
|
var where = (del as DeleteProvider)._commonUtils.WhereItems(tracking.DeleteLog[a].Item1.Primarys, "", tracking.DeleteLog[a].Item2, (del as DeleteProvider)._params);
|
||||||
_cascadeAffrows += del.Where(where).ExecuteAffrows();
|
_cascadeAffrows += del.Where(where).ExecuteAffrows();
|
||||||
_changeReport?.AddRange(tracking.DeleteLog[a].Item2.Select(x =>
|
_changeReport?.AddRange(tracking.DeleteLog[a].Item2.Select(x =>
|
||||||
new ChangeReport.ChangeInfo
|
new ChangeReport.ChangeInfo
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using FreeSql.Extensions.EntityUtil;
|
using FreeSql.Extensions.EntityUtil;
|
||||||
|
using FreeSql.Internal.CommonProvider;
|
||||||
using FreeSql.Internal.Model;
|
using FreeSql.Internal.Model;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
@ -699,7 +700,8 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
return refitem;
|
return refitem;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
var refitems = refset.Select.Where(commonUtils.WhereItems(oto.Item1.RefColumns.ToArray(), "a.", refwhereItems)).ToList();
|
var refsetSelect = refset.Select;
|
||||||
|
var refitems = refsetSelect.Where(commonUtils.WhereItems(oto.Item1.RefColumns.ToArray(), "a.", refwhereItems, (refsetSelect as Select0Provider)._params)).ToList();
|
||||||
LocalEach(refset, refitems, false);
|
LocalEach(refset, refitems, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -739,7 +741,8 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
return refitem;
|
return refitem;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
var childs = refset.Select.Where(commonUtils.WhereItems(otm.Item1.RefColumns.ToArray(), "a.", refwhereItems)).ToList();
|
var refsetSelect = refset.Select;
|
||||||
|
var childs = refsetSelect.Where(commonUtils.WhereItems(otm.Item1.RefColumns.ToArray(), "a.", refwhereItems, (refsetSelect as Select0Provider)._params)).ToList();
|
||||||
LocalEach(refset, childs, true);
|
LocalEach(refset, childs, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -794,7 +797,8 @@ namespace FreeSql
|
|||||||
}
|
}
|
||||||
return refitem;
|
return refitem;
|
||||||
}).ToList();
|
}).ToList();
|
||||||
var childs = midset.Select.Where(commonUtils.WhereItems(mtm.Item1.MiddleColumns.Take(mtm.Item1.Columns.Count).ToArray(), "a.", miditems)).ToList();
|
var midsetSelect = midset.Select;
|
||||||
|
var childs = midsetSelect.Where(commonUtils.WhereItems(mtm.Item1.MiddleColumns.Take(mtm.Item1.Columns.Count).ToArray(), "a.", miditems, (midsetSelect as Select0Provider)._params)).ToList();
|
||||||
LocalEach(midset, childs, true);
|
LocalEach(midset, childs, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1017,7 +1017,7 @@ SELECT ");
|
|||||||
var deleteDict = new DeleteDictImpl(freesql);
|
var deleteDict = new DeleteDictImpl(freesql);
|
||||||
UpdateProvider<Dictionary<string, object>>.GetDictionaryTableInfo(source, deleteDict._deleteProvider._orm, ref deleteDict._deleteProvider._table);
|
UpdateProvider<Dictionary<string, object>>.GetDictionaryTableInfo(source, deleteDict._deleteProvider._orm, ref deleteDict._deleteProvider._table);
|
||||||
var primarys = UpdateDictImpl.GetPrimarys(deleteDict._deleteProvider._table, source.Keys.ToArray());
|
var primarys = UpdateDictImpl.GetPrimarys(deleteDict._deleteProvider._table, source.Keys.ToArray());
|
||||||
deleteDict._deleteProvider.Where(deleteDict._deleteProvider._commonUtils.WhereItems(primarys, "", new[] { source }));
|
deleteDict._deleteProvider.Where(deleteDict._deleteProvider._commonUtils.WhereItems(primarys, "", new[] { source }, deleteDict._deleteProvider._params));
|
||||||
return deleteDict;
|
return deleteDict;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1035,7 +1035,7 @@ SELECT ");
|
|||||||
var sourceFirst = source.FirstOrDefault();
|
var sourceFirst = source.FirstOrDefault();
|
||||||
UpdateProvider<Dictionary<string, object>>.GetDictionaryTableInfo(sourceFirst, deleteDict._deleteProvider._orm, ref deleteDict._deleteProvider._table);
|
UpdateProvider<Dictionary<string, object>>.GetDictionaryTableInfo(sourceFirst, deleteDict._deleteProvider._orm, ref deleteDict._deleteProvider._table);
|
||||||
var primarys = UpdateDictImpl.GetPrimarys(deleteDict._deleteProvider._table, sourceFirst.Keys.ToArray());
|
var primarys = UpdateDictImpl.GetPrimarys(deleteDict._deleteProvider._table, sourceFirst.Keys.ToArray());
|
||||||
deleteDict._deleteProvider.Where(deleteDict._deleteProvider._commonUtils.WhereItems(primarys, "", source));
|
deleteDict._deleteProvider.Where(deleteDict._deleteProvider._commonUtils.WhereItems(primarys, "", source, deleteDict._deleteProvider._params));
|
||||||
return deleteDict;
|
return deleteDict;
|
||||||
}
|
}
|
||||||
foreach (var item in source)
|
foreach (var item in source)
|
||||||
|
@ -116,7 +116,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
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));
|
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)) :
|
||||||
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
|
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
|
||||||
|
@ -28,8 +28,8 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
public List<GlobalFilter.Item> _whereGlobalFilter;
|
public List<GlobalFilter.Item> _whereGlobalFilter;
|
||||||
public StringBuilder _set = new StringBuilder();
|
public StringBuilder _set = new StringBuilder();
|
||||||
public StringBuilder _setIncr = new StringBuilder();
|
public StringBuilder _setIncr = new StringBuilder();
|
||||||
public List<DbParameter> _params = new List<DbParameter>();
|
public List<DbParameter> _params = new List<DbParameter>(); //已经固定的
|
||||||
public List<DbParameter> _paramsSource = new List<DbParameter>();
|
public List<DbParameter> _paramsSource = new List<DbParameter>(); //每次ToSql重新生成的
|
||||||
public bool _noneParameter;
|
public bool _noneParameter;
|
||||||
public int _batchRowsLimit, _batchParameterLimit;
|
public int _batchRowsLimit, _batchParameterLimit;
|
||||||
public bool _batchAutoTransaction = true;
|
public bool _batchAutoTransaction = true;
|
||||||
@ -798,7 +798,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
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));
|
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)) :
|
||||||
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
|
this.Where($"not({_commonUtils.WhereObject(_table, "", dywhere)})");
|
||||||
@ -1232,7 +1232,7 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
if (_source.Any())
|
if (_source.Any())
|
||||||
{
|
{
|
||||||
if (_tempPrimarys.Any() == false) throw new ArgumentException(CoreStrings.NoPrimaryKey_UseSetDto(_table.Type.DisplayCsharp()));
|
if (_tempPrimarys.Any() == false) throw new ArgumentException(CoreStrings.NoPrimaryKey_UseSetDto(_table.Type.DisplayCsharp()));
|
||||||
sb.Append('(').Append(_commonUtils.WhereItems(_tempPrimarys, "", _source)).Append(')');
|
sb.Append('(').Append(_commonUtils.WhereItems(_tempPrimarys, "", _source, _paramsSource)).Append(')');
|
||||||
andTimes++;
|
andTimes++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,37 +556,50 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string WhereItems<TEntity>(ColumnInfo[] primarys, string aliasAndDot, IEnumerable<TEntity> items)
|
public string WhereItems<TEntity>(ColumnInfo[] primarys, string aliasAndDot, IEnumerable<TEntity> items, List<DbParameter> dbParams)
|
||||||
{
|
{
|
||||||
if (items == null || items.Any() == false) return null;
|
if (items == null || items.Any() == false) return null;
|
||||||
if (primarys.Any() == false) return null;
|
if (primarys.Any() == false) return null;
|
||||||
var its = items.Where(a => a != null).ToArray();
|
var its = items.Where(a => a != null).ToArray();
|
||||||
|
|
||||||
|
if (its.Length == 1) //v3.5.100 单条支持参数化
|
||||||
|
{
|
||||||
|
var filter = "";
|
||||||
|
foreach (var pk in primarys)
|
||||||
|
{
|
||||||
|
var pkval = pk.GetDbValue(its[0]);
|
||||||
|
if (pkval == null) return null;
|
||||||
|
if (primarys.Length > 1) filter += " AND ";
|
||||||
|
filter += $"{aliasAndDot}{this.QuoteSqlName(pk.Attribute.Name)} = ";
|
||||||
|
if (CodeFirst.IsGenerateCommandParameterWithLambda && dbParams != null) //v3.5.100 单条支持参数化
|
||||||
|
{
|
||||||
|
AppendParamter(dbParams, null, primarys[0], primarys[0].Attribute.MapType, pkval);
|
||||||
|
filter += QuoteWriteParamterAdapter(primarys[0].Attribute.MapType, QuoteParamterName($"exp_{dbParams.Count}"));
|
||||||
|
}
|
||||||
|
filter += RewriteColumn(pk, GetNoneParamaterSqlValue(null, null, pk, pk.Attribute.MapType, pkval));
|
||||||
|
}
|
||||||
|
return primarys.Length > 1 ? filter.Remove(0, 5) : filter;
|
||||||
|
}
|
||||||
|
|
||||||
var pk1 = primarys.FirstOrDefault();
|
var pk1 = primarys.FirstOrDefault();
|
||||||
if (primarys.Length == 1)
|
if (primarys.Length == 1)
|
||||||
{
|
{
|
||||||
var indt = its.Select(a => pk1.GetDbValue(a)).Where(a => a != null).ToArray();
|
var indt = its.Select(a => pk1.GetDbValue(a)).Where(a => a != null).ToArray();
|
||||||
if (indt.Any() == false) return null;
|
if (indt.Any() == false) return null;
|
||||||
var sbin = new StringBuilder();
|
var sbin = new StringBuilder();
|
||||||
sbin.Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name));
|
sbin.Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name)).Append(" IN (");
|
||||||
if (indt.Length == 1) sbin.Append(" = ").Append(RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, indt.First())));
|
var idx = 0;
|
||||||
else
|
foreach (var z in indt)
|
||||||
{
|
{
|
||||||
sbin.Append(" IN (");
|
if (++idx > 500)
|
||||||
var idx = 0;
|
|
||||||
foreach (var z in indt)
|
|
||||||
{
|
{
|
||||||
if (++idx > 500)
|
sbin.Append(") OR ").Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name)).Append(" IN ("); //500元素分割
|
||||||
{
|
idx = 1;
|
||||||
sbin.Append(") OR ").Append(aliasAndDot).Append(this.QuoteSqlName(pk1.Attribute.Name)).Append(" IN ("); //500元素分割
|
|
||||||
idx = 1;
|
|
||||||
}
|
|
||||||
if (idx > 1) sbin.Append(",");
|
|
||||||
sbin.Append(RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, z)));
|
|
||||||
}
|
}
|
||||||
sbin.Append(')');
|
if (idx > 1) sbin.Append(",");
|
||||||
|
sbin.Append(RewriteColumn(pk1, GetNoneParamaterSqlValue(null, null, pk1, pk1.Attribute.MapType, z)));
|
||||||
}
|
}
|
||||||
return sbin.ToString();
|
return sbin.Append(')').ToString();
|
||||||
}
|
}
|
||||||
var dicpk = its.Length > 5 ? new Dictionary<string, bool>() : null;
|
var dicpk = its.Length > 5 ? new Dictionary<string, bool>() : null;
|
||||||
var sb = its.Length > 5 ? null : new StringBuilder();
|
var sb = its.Length > 5 ? null : new StringBuilder();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user