mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 20:38:16 +08:00
- 完成 [Table(AsTable = xx)] 分表特性查询;
This commit is contained in:
@ -1690,6 +1690,7 @@ namespace FreeSql.Internal
|
||||
public abstract string ExpressionLambdaToSqlCallTimeSpan(MethodCallExpression exp, ExpTSC tsc);
|
||||
public abstract string ExpressionLambdaToSqlCallConvert(MethodCallExpression exp, ExpTSC tsc);
|
||||
public abstract string ExpressionLambdaToSqlOther(Expression exp, ExpTSC tsc);
|
||||
public string ExpressionConstDateTime(Expression exp) => exp is ConstantExpression operandExpConst ? formatSql(Utils.GetDataReaderValue(typeof(DateTime), operandExpConst.Value), null, null, null) : null;
|
||||
|
||||
public enum ExpressionStyle
|
||||
{
|
||||
|
@ -195,7 +195,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var sb = new StringBuilder();
|
||||
if (_table.AsTableImpl != null)
|
||||
{
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, _table, _commonUtils);
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);
|
||||
foreach (var name in names)
|
||||
{
|
||||
_tableRule = old => name;
|
||||
@ -228,7 +228,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var sb = new StringBuilder();
|
||||
if (_table.AsTableImpl != null)
|
||||
{
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, _table, _commonUtils);
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);
|
||||
foreach (var name in names)
|
||||
{
|
||||
_tableRule = old => name;
|
||||
|
@ -460,7 +460,54 @@ namespace FreeSql.Internal.CommonProvider
|
||||
protected List<Dictionary<Type, string>> GetTableRuleUnions()
|
||||
{
|
||||
var unions = new List<Dictionary<Type, string>>();
|
||||
var trs = _tableRules.Any() ? _tableRules : new List<Func<Type, string, string>>(new[] { new Func<Type, string, string>((type, oldname) => null) });
|
||||
var trs = _tableRules.Any() ? _tableRules : new List<Func<Type, string, string>>();
|
||||
|
||||
if (trs.Any() == false)
|
||||
{
|
||||
string[] LocalGetTableNames(SelectTableInfo tb)
|
||||
{
|
||||
if (tb.Table.AsTableImpl != null)
|
||||
{
|
||||
string[] aret = null;
|
||||
if (_where.Length == 0) aret = tb.Table.AsTableImpl.AllTables.ToArray();
|
||||
else aret = tb.Table.AsTableImpl.GetTableNamesBySqlWhere(_where.ToString(), _params, tb, _commonUtils).ToArray();
|
||||
if (aret.Any() == false) aret = tb.Table.AsTableImpl.AllTables.Take(1).ToArray();
|
||||
|
||||
for (var a = 0; a < aret.Length; a++)
|
||||
{
|
||||
if (_orm.CodeFirst.IsSyncStructureToLower) aret[a] = aret[a].ToLower();
|
||||
if (_orm.CodeFirst.IsSyncStructureToUpper) aret[a] = aret[a].ToUpper();
|
||||
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(tb.Table.Type, aret[a]);
|
||||
}
|
||||
return aret;
|
||||
}
|
||||
return new string[] { tb.Table.DbName };
|
||||
}
|
||||
var tbnames = _tables.GroupBy(a => a.Table.Type).Select(g => _tables.Where(a => a.Table.Type == g.Key).FirstOrDefault()).Select(a => new { Tb = a, Names = LocalGetTableNames(a) }).ToList();
|
||||
var dict = new Dictionary<Type, string>();
|
||||
tbnames.ForEach(a =>
|
||||
{
|
||||
dict.Add(a.Tb.Table.Type, a.Names[0]);
|
||||
});
|
||||
unions.Add(dict);
|
||||
for (var a = 0; a < tbnames.Count; a++)
|
||||
{
|
||||
if (tbnames[a].Names.Length <= 1) continue;
|
||||
var unionsCount = unions.Count;
|
||||
for (var b = 1; b < tbnames[a].Names.Length; b++)
|
||||
{
|
||||
for (var d = 0; d < unionsCount; d++)
|
||||
{
|
||||
dict = new Dictionary<Type, string>();
|
||||
foreach (var uit in unions[d])
|
||||
dict.Add(uit.Key, uit.Key == tbnames[a].Tb.Table.Type ? tbnames[a].Names[b] : uit.Value);
|
||||
unions.Add(dict);
|
||||
}
|
||||
}
|
||||
}
|
||||
return unions;
|
||||
}
|
||||
if (trs.Any() == false) trs.Add(new Func<Type, string, string>((type, oldname) => null));
|
||||
foreach (var tr in trs)
|
||||
{
|
||||
var dict = new Dictionary<Type, string>();
|
||||
|
@ -803,7 +803,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var sb = new StringBuilder();
|
||||
if (_table.AsTableImpl != null)
|
||||
{
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, _table, _commonUtils);
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);
|
||||
foreach (var name in names)
|
||||
{
|
||||
_tableRule = old => name;
|
||||
@ -835,7 +835,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var sb = new StringBuilder();
|
||||
if (_table.AsTableImpl != null)
|
||||
{
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, _table, _commonUtils);
|
||||
var names = _table.AsTableImpl.GetTableNamesBySqlWhere(newwhere.ToString(), _params, new SelectTableInfo { Table = _table }, _commonUtils);
|
||||
foreach (var name in names)
|
||||
{
|
||||
_tableRule = old => name;
|
||||
|
Reference in New Issue
Block a user