- 增加 WithTempQuery + FromQuery 嵌套查询功能;#1192

This commit is contained in:
2881099
2022-07-25 13:02:01 +08:00
parent ef69eba405
commit 1ee6ecf16f
25 changed files with 1778 additions and 208 deletions

View File

@ -25,6 +25,7 @@ namespace FreeSql.Internal
public ParameterExpression _lambdaParameter;
public ReadAnonymousTypeInfo _map;
public string _field;
public ReadAnonymousTypeInfo ParseExpMapResult { get; protected set; }
public abstract string ParseExp(Expression[] members);
}
@ -50,6 +51,23 @@ namespace FreeSql.Internal
public bool ReadAnonymousField(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, StringBuilder field, ReadAnonymousTypeInfo parent, ref int index, Expression exp, Select0Provider select,
BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<string> findIncludeMany, List<Expression> findSubSelectMany, bool isAllDtoMap)
{
void LocalSetFieldAlias(ref int localIndex)
{
if (localIndex >= 0)
{
parent.DbNestedField = $"as{++localIndex}";
field.Append(_common.FieldAsAlias(parent.DbNestedField));
}
else if (diymemexp?.ParseExpMapResult != null)
parent.DbNestedField = diymemexp.ParseExpMapResult.DbNestedField;
else if (string.IsNullOrEmpty(parent.CsName) == false)
{
parent.DbNestedField = GetFieldAsCsName(parent.CsName);
if (localIndex == ReadAnonymousFieldAsCsName && parent.DbField.EndsWith(parent.DbNestedField, StringComparison.CurrentCultureIgnoreCase) == false) //DbField 和 CsName 相同的时候,不处理
field.Append(_common.FieldAsAlias(parent.DbNestedField));
}
}
Func<ExpTSC> getTSC = () => new ExpTSC { _tables = _tables, _tableRule = _tableRule, diymemexp = diymemexp, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereGlobalFilter = whereGlobalFilter, dbParams = select?._params }; //#462 添加 DbParams 解决
switch (exp.NodeType)
{
@ -59,8 +77,7 @@ namespace FreeSql.Internal
case ExpressionType.NegateChecked:
parent.DbField = $"-({ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, getTSC())})";
field.Append(", ").Append(parent.DbField);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(GetFieldAsCsName(parent.CsName)));
LocalSetFieldAlias(ref index);
if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type;
return false;
case ExpressionType.Convert: return ReadAnonymousField(_tables, _tableRule, field, parent, ref index, (exp as UnaryExpression)?.Operand, select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, isAllDtoMap);
@ -79,8 +96,7 @@ namespace FreeSql.Internal
else
parent.DbField = _common.FormatSql("{0}", constExp?.Value);
field.Append(", ").Append(parent.DbField);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(GetFieldAsCsName(parent.CsName)));
LocalSetFieldAlias(ref index);
if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type;
return false;
case ExpressionType.Conditional:
@ -109,13 +125,12 @@ namespace FreeSql.Internal
else
parent.DbField = ExpressionLambdaToSql(exp, getTSC());
field.Append(", ").Append(parent.DbField);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(GetFieldAsCsName(parent.CsName)));
LocalSetFieldAlias(ref index);
if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type;
return false;
case ExpressionType.Parameter:
case ExpressionType.MemberAccess:
if (_common.GetTableByEntity(exp.Type) != null &&
if ((_common.GetTableByEntity(exp.Type) != null || exp.Type.IsAnonymousType() && diymemexp != null) &&
//判断 [JsonMap] 并非导航对象
(exp.NodeType == ExpressionType.Parameter || exp is MemberExpression expMem && (
_common.GetTableByEntity(expMem.Expression.Type)?.ColumnsByCs.ContainsKey(expMem.Member.Name) == false ||
@ -126,6 +141,28 @@ namespace FreeSql.Internal
//加载表所有字段
var map = new List<SelectColumnInfo>();
ExpressionSelectColumn_MemberAccess(_tables, _tableRule, map, SelectTableInfoType.From, exp, true, diymemexp);
if (map.Any() == false)
{
if (diymemexp != null && diymemexp.ParseExpMapResult != null)
{
var withTempQueryParser = diymemexp as Select0Provider.WithTempQueryParser;
diymemexp.ParseExpMapResult.CopyTo(parent);
foreach (var child in parent.GetAllChilds())
{
if (withTempQueryParser != null)
field.Append(", ").Append(withTempQueryParser.ParseExpMatchedTable.Alias).Append(".").Append(child.DbNestedField);
else
field.Append(", ").Append(child.DbField);
if (index >= 0)
{
child.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(child.DbNestedField));
}
}
return false;
}
throw new Exception($"未能加载它的所有成员,不支持解析表达式树 {exp}");
}
var tb = parent.Table = map.First().Table.Table;
parent.CsType = tb.Type;
parent.Consturctor = tb.Type.InternalGetTypeConstructor0OrFirst();
@ -137,14 +174,19 @@ namespace FreeSql.Internal
Property = tb.Properties.TryGetValue(map[idx].Column.CsName, out var tryprop) ? tryprop : tb.Type.GetProperty(map[idx].Column.CsName, BindingFlags.Public | BindingFlags.Instance),
CsName = map[idx].Column.CsName,
DbField = $"{map[idx].Table.Alias}.{_common.QuoteSqlName(map[idx].Column.Attribute.Name)}",
DbNestedField = _common.QuoteSqlName(map[idx].Column.Attribute.Name),
CsType = map[idx].Column.CsType,
MapType = map[idx].Column.Attribute.MapType
};
field.Append(", ").Append(_common.RereadColumn(map[idx].Column, child.DbField));
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
if (index >= 0)
{
child.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(child.DbNestedField));
}
parent.Childs.Add(child);
}
if (_tables.Count > 1)
if (_tables?.Count > 1)
{ //如果下级导航属性被 Include 过,则将他们也查询出来
foreach (var memProp in tb.Properties.Values)
{
@ -199,15 +241,19 @@ namespace FreeSql.Internal
}
if (diymemexp != null && exp is MemberExpression expMem2 && expMem2.Member.Name == "Key" && expMem2.Expression.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`"))
{
field.Append(diymemexp._field);
field.Append(diymemexp._field);
if (diymemexp._map.Childs.Any() == false) //处理 GroupBy(a => a.Title) ToSql(g => new { tit = a.Key }, FieldAliasOptions.AsProperty) 问题
{
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
else if (index == ReadAnonymousFieldAsCsName)
if (index >= 0)
{
var csname = GetFieldAsCsName(parent.CsName);
if (diymemexp._field.EndsWith(csname, StringComparison.CurrentCultureIgnoreCase) == false) //DbField 和 CsName 相同的时候,不处理
field.Append(_common.FieldAsAlias(csname));
parent.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(parent.DbNestedField));
}
else if (string.IsNullOrEmpty(parent.CsName) == false)
{
parent.DbNestedField = GetFieldAsCsName(parent.CsName);
if (index == ReadAnonymousFieldAsCsName && diymemexp._field.EndsWith(parent.DbNestedField, StringComparison.CurrentCultureIgnoreCase) == false) //DbField 和 CsName 相同的时候,不处理
field.Append(_common.FieldAsAlias(parent.DbNestedField));
}
}
var parentProp = parent.Property;
@ -217,20 +263,14 @@ namespace FreeSql.Internal
}
if (parent.CsType == null) parent.CsType = exp.Type;
var pdbfield = parent.DbField = ExpressionLambdaToSql(exp, getTSC());
if (parent.MapType == null || _tables?.Any(a => a.Table.IsRereadSql) == true)
if (parent.MapType == null || _tables?.Any(a => a.Table?.IsRereadSql == true) == true)
{
var findcol = SearchColumnByField(_tables, null, parent.DbField);
if (parent.MapType == null) parent.MapType = findcol?.Attribute.MapType ?? exp.Type;
if (findcol != null) pdbfield = _common.RereadColumn(findcol, pdbfield);
}
field.Append(", ").Append(pdbfield);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false)
{
var csname = GetFieldAsCsName(parent.CsName);
if (parent.DbField.EndsWith(csname, StringComparison.CurrentCultureIgnoreCase) == false) //DbField 和 CsName 相同的时候,不处理
field.Append(_common.FieldAsAlias(csname));
}
LocalSetFieldAlias(ref index);
return false;
}
return false;
@ -263,7 +303,34 @@ namespace FreeSql.Internal
{
foreach (var dtTb in _tables)
{
if (dtTb.Table.ColumnsByCs.TryGetValue(dtoProp.Name, out var trydtocol) == false) continue;
if (dtTb.Table.ColumnsByCs.TryGetValue(dtoProp.Name, out var trydtocol) == false)
{
if (diymemexp != null && dtTb.Parameter != null && dtTb.Parameter.Type.GetPropertiesDictIgnoreCase().TryGetValue(dtoProp.Name, out var dtTbProp))
{
var dbfield = diymemexp.ParseExp(new Expression[] { Expression.MakeMemberAccess(dtTb.Parameter, dtTbProp) });
if (diymemexp.ParseExpMapResult != null)
{
var diychild = new ReadAnonymousTypeInfo
{
Property = dtoProp,
CsName = dtoProp.Name,
CsType = dtTbProp.PropertyType,
MapType = dtTbProp.PropertyType
};
parent.Childs.Add(diychild);
diychild.DbField = $"{dtTb.Alias}.{diymemexp.ParseExpMapResult.DbNestedField}";
diychild.DbNestedField = diymemexp.ParseExpMapResult.DbNestedField;
field.Append(", ").Append(diychild.DbField);
if (index >= 0)
{
diychild.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(diychild.DbNestedField));
}
break;
}
}
continue;
}
if (trydtocol.Attribute.IsIgnore == true) continue;
if (dicBindings?.ContainsKey(dtoProp.Name) == true) continue;
@ -280,8 +347,13 @@ namespace FreeSql.Internal
else
{
child.DbField = $"{dtTb.Alias}.{_common.QuoteSqlName(trydtocol.Attribute.Name)}";
child.DbNestedField = _common.QuoteSqlName(trydtocol.Attribute.Name);
field.Append(", ").Append(_common.RereadColumn(trydtocol, child.DbField));
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
if (index >= 0)
{
child.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(child.DbNestedField));
}
}
break;
}
@ -328,15 +400,18 @@ namespace FreeSql.Internal
//处理构造参数
for (var a = 0; a < newExp.Arguments.Count; a++)
{
var csname = newExp.Members != null ? newExp.Members[a].Name : (newExp.Arguments[a] as MemberExpression)?.Member.Name;
var child = new ReadAnonymousTypeInfo
{
Property = null,
CsName = newExp.Members != null ? newExp.Members[a].Name : (newExp.Arguments[a] as MemberExpression)?.Member.Name,
CsName = csname,
CsType = newExp.Arguments[a].Type,
MapType = newExp.Arguments[a].Type
};
parent.Childs.Add(child);
ReadAnonymousField(_tables, _tableRule, field, child, ref index, newExp.Arguments[a], select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, false);
if (child.CsName == null)
child.CsName = csname;
}
}
else
@ -348,7 +423,34 @@ namespace FreeSql.Internal
{
foreach (var dtTb in _tables)
{
if (dtTb.Table.ColumnsByCs.TryGetValue(dtoProp.Name, out var trydtocol) == false) continue;
if (dtTb.Table.ColumnsByCs.TryGetValue(dtoProp.Name, out var trydtocol) == false)
{
if (diymemexp != null && dtTb.Parameter != null && dtTb.Parameter.Type.GetPropertiesDictIgnoreCase().TryGetValue(dtoProp.Name, out var dtTbProp))
{
var dbfield = diymemexp.ParseExp(new Expression[] { Expression.MakeMemberAccess(dtTb.Parameter, dtTbProp) });
if (diymemexp.ParseExpMapResult != null)
{
var diychild = new ReadAnonymousTypeInfo
{
Property = dtoProp,
CsName = dtoProp.Name,
CsType = dtTbProp.PropertyType,
MapType = dtTbProp.PropertyType
};
parent.Childs.Add(diychild);
diychild.DbField = $"{dtTb.Alias}.{diymemexp.ParseExpMapResult.DbNestedField}";
diychild.DbNestedField = diymemexp.ParseExpMapResult.DbNestedField;
field.Append(", ").Append(diychild.DbField);
if (index >= 0)
{
diychild.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(diychild.DbNestedField));
}
break;
}
}
continue;
}
if (trydtocol.Attribute.IsIgnore == true) continue;
var child = new ReadAnonymousTypeInfo
@ -364,8 +466,13 @@ namespace FreeSql.Internal
else
{
child.DbField = _common.RereadColumn(trydtocol, $"{dtTb.Alias}.{_common.QuoteSqlName(trydtocol.Attribute.Name)}");
child.DbNestedField = _common.QuoteSqlName(trydtocol.Attribute.Name);
field.Append(", ").Append(child.DbField);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
if (index >= 0)
{
child.DbNestedField = $"as{++index}";
field.Append(_common.FieldAsAlias(child.DbNestedField));
}
}
break;
}
@ -376,8 +483,7 @@ namespace FreeSql.Internal
}
parent.DbField = $"({ExpressionLambdaToSql(exp, getTSC())})";
field.Append(", ").Append(parent.DbField);
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(GetFieldAsCsName(parent.CsName)));
LocalSetFieldAlias(ref index);
if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type;
return false;
}
@ -458,8 +564,8 @@ namespace FreeSql.Internal
var testCol = _common.TrimQuoteSqlName(field).Split(new[] { '.' }, 2);
if (testCol.Length == 2)
{
var testTb = _tables.Where(a => a.Alias == testCol[0]).ToArray();
if (testTb.Length == 1 && testTb[0].Table.Columns.TryGetValue(testCol[1], out var trytstcol))
var testTb = _tables.Where(a => a.Table != null && a.Alias == testCol[0]).ToArray();
if (testTb.Length == 1 && testTb[0].Table.Columns.TryGetValue(testCol[1], out var trytstcol) == true)
return trytstcol;
}
}
@ -530,6 +636,12 @@ namespace FreeSql.Internal
public string ExpressionWhereLambda(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, Expression exp, BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter, List<DbParameter> dbParams)
{
if (_tables?.Count > 1)
{
foreach (var tb in _tables)
if (tb.Parameter != null && tb.AliasInit.StartsWith("SP10"))
tb.Alias = tb.Parameter.Name;
}
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, _tableRule = _tableRule, diymemexp = diymemexp, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereGlobalFilter = whereGlobalFilter, dbParams = dbParams });
return GetBoolString(exp, sql);
}
@ -537,6 +649,12 @@ namespace FreeSql.Internal
public void ExpressionJoinLambda(List<SelectTableInfo> _tables, Func<Type, string, string> _tableRule, SelectTableInfoType tbtype, Expression exp, BaseDiyMemberExpression diymemexp, List<GlobalFilter.Item> whereGlobalFilter)
{
var tbidx = _tables.Count;
if (tbidx > 1)
{
foreach (var tb in _tables)
if (tb.Parameter != null && tb.AliasInit.StartsWith("SP10"))
tb.Alias = tb.Parameter.Name;
}
var sql = ExpressionLambdaToSql(exp, new ExpTSC { _tables = _tables, _tableRule = _tableRule, diymemexp = diymemexp, tbtype = tbtype, isQuoteName = true, isDisableDiyParse = false, style = ExpressionStyle.Where, whereGlobalFilter = whereGlobalFilter });
sql = GetBoolString(exp, sql);
@ -777,6 +895,7 @@ namespace FreeSql.Internal
return $"not({ExpressionLambdaToSql(notExp, tsc)})";
case ExpressionType.Quote: return ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc);
case ExpressionType.Lambda: return ExpressionLambdaToSql((exp as LambdaExpression)?.Body, tsc);
case ExpressionType.Invoke: return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
case ExpressionType.TypeAs:
case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
@ -1563,8 +1682,8 @@ namespace FreeSql.Internal
{
var expStackFirst = expStack.First();
var bidx = expStackFirst.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate`") ? 2 : 1; //.Key .Value
var expText = tsc.diymemexp.ParseExp(expStack.Where((a, b) => b >= bidx).ToArray());
if (string.IsNullOrEmpty(expText) == false) return expText;
var diyexpResult = tsc.diymemexp.ParseExp(expStack.Where((a, b) => b >= bidx).ToArray());
if (string.IsNullOrEmpty(diyexpResult) == false) return diyexpResult;
}
var psgpdymes = _subSelectParentDiyMemExps.Value; //解决:分组之后的子查询解析
if (psgpdymes?.Any() == true)
@ -1572,8 +1691,8 @@ namespace FreeSql.Internal
var expStackFirst = expStack.First();
if (expStackFirst.NodeType == ExpressionType.Parameter)
{
var expText = psgpdymes.Where(a => a._lambdaParameter == expStackFirst).FirstOrDefault()?.ParseExp(expStack.Where((a, b) => b >= 2).ToArray());
if (string.IsNullOrEmpty(expText) == false) return expText;
var diyexpResult = psgpdymes.Where(a => a._lambdaParameter == expStackFirst).FirstOrDefault()?.ParseExp(expStack.Where((a, b) => b >= 2).ToArray());
if (string.IsNullOrEmpty(diyexpResult) == false) return diyexpResult;
}
}

View File

@ -46,6 +46,11 @@ namespace FreeSql.Internal.CommonProvider
public List<GlobalFilter.Item> _whereGlobalFilter;
public Func<bool> _cancel;
public bool _is_AsTreeCte;
public BaseDiyMemberExpression _diymemexpWithTempQuery;
public bool IsDefaultSqlContent => _distinct == false && _is_AsTreeCte == false && _tables.Count == 1 && _where.Length == 0 && _join.Length == 0 &&
string.IsNullOrWhiteSpace(_orderby) && string.IsNullOrWhiteSpace(_groupby) && string.IsNullOrWhiteSpace(_tosqlAppendContent) &&
_aliasRule == null && _selectExpression == null;
public Select0Provider()
{
@ -71,6 +76,7 @@ namespace FreeSql.Internal.CommonProvider
_selectExpression = null;
_whereGlobalFilter?.Clear();
_cancel = null;
_diymemexpWithTempQuery = null;
}
public static void CopyData(Select0Provider from, Select0Provider to, ReadOnlyCollection<ParameterExpression> lambParms)
@ -86,7 +92,16 @@ namespace FreeSql.Internal.CommonProvider
to._params = new List<DbParameter>(from._params.ToArray());
if (lambParms == null)
to._tables = new List<SelectTableInfo>(from._tables.ToArray());
{
if (to._tables.Count <= from._tables.Count)
to._tables = new List<SelectTableInfo>(from._tables.ToArray());
else
{
to._tables = new List<SelectTableInfo>(to._tables);
for (var a = 0; a < from._tables.Count; a++)
to._tables[a] = from._tables[a];
}
}
else
{
var findedIndexs = new List<int>();
@ -131,6 +146,95 @@ namespace FreeSql.Internal.CommonProvider
to._whereGlobalFilter = new List<GlobalFilter.Item>(from._whereGlobalFilter.ToArray());
to._cancel = from._cancel;
to._is_AsTreeCte = from._is_AsTreeCte;
to._diymemexpWithTempQuery = from._diymemexpWithTempQuery;
}
internal class WithTempQueryParser : BaseDiyMemberExpression
{
public List<InsideInfo> _insideSelectList = new List<InsideInfo>();
public List<SelectTableInfo> _outsideTable = new List<SelectTableInfo>();
public WithTempQueryParser(Select0Provider insideSelect, SelectGroupingProvider insideSelectGroup, Expression selector, SelectTableInfo outsideTable)
{
_insideSelectList.Add(new InsideInfo(insideSelect, insideSelectGroup, selector));
_outsideTable.Add(outsideTable);
}
public class InsideInfo
{
public Select0Provider InsideSelect { get; }
public SelectGroupingProvider InsideSelectGroup { get; }
public CommonExpression InsideComonExp;
public string InsideField { get; }
public ReadAnonymousTypeAfInfo InsideAf { get; }
public ReadAnonymousTypeInfo InsideMap { get; }
public InsideInfo(Select0Provider insideSelect, SelectGroupingProvider insideSelectGroup, Expression selector)
{
InsideSelect = insideSelect;
InsideSelectGroup = insideSelectGroup;
InsideMap = new ReadAnonymousTypeInfo();
var field = new StringBuilder();
var index = CommonExpression.ReadAnonymousFieldAsCsName; //AsProperty
if (selector != null)
{
if (insideSelectGroup != null)
InsideSelect._commonExpression.ReadAnonymousField(null, insideSelect._tableRule, field, InsideMap, ref index, selector, insideSelect, InsideSelectGroup, null, null, null, false);
else if (insideSelect != null)
InsideSelect._commonExpression.ReadAnonymousField(insideSelect._tables, InsideSelect._tableRule, field, InsideMap, ref index, selector, null, insideSelect._diymemexpWithTempQuery, insideSelect._whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
}
InsideField = field.Length > 0 ? field.Remove(0, 2).ToString() : null;
InsideAf = new ReadAnonymousTypeAfInfo(InsideMap, "*");
}
}
public WithTempQueryParser Append<TDto>(ISelect<TDto> select, SelectTableInfo outsideTable)
{
if (outsideTable != null && (select as Select0Provider)?._diymemexpWithTempQuery is WithTempQueryParser withTempQuery)
{
_insideSelectList.Add(withTempQuery._insideSelectList[0]);
_outsideTable.Add(outsideTable);
}
return this;
}
public SelectTableInfo ParseExpMatchedTable { get; private set; }
public override string ParseExp(Expression[] members)
{
ParseExpMapResult = null;
ParseExpMatchedTable = GetOutsideSelectTable(members.FirstOrDefault()?.GetParameter());
var insideIndex = _outsideTable.FindIndex(a => a == ParseExpMatchedTable);
if (insideIndex == -1)
{
ParseExpMatchedTable = null;
return null;
}
var insideData = _insideSelectList[insideIndex];
if (members.Any() == false)
{
ParseExpMapResult = insideData.InsideMap;
return $"{ParseExpMatchedTable.Alias}.{insideData.InsideMap.DbNestedField}";
}
var read = insideData.InsideMap;
for (var a = 0; a < members.Length; a++)
{
read = read.Childs.Where(z => z.CsName == (members[a] as MemberExpression)?.Member.Name).FirstOrDefault();
if (read == null) return null;
}
ParseExpMapResult = read;
return $"{ParseExpMatchedTable.Alias}.{read.DbNestedField}";
}
public SelectTableInfo GetOutsideSelectTable(ParameterExpression parameterExp)
{
if (parameterExp == null) return _outsideTable[0];
var find = _outsideTable.Where(a => a.Parameter == parameterExp).ToArray();
if (find.Length == 1) return find[0];
find = _outsideTable.Where(a => a.Table.Type == parameterExp.Type).ToArray();
if (find.Length == 1) return find[0];
find = _outsideTable.Where(a => a.Alias == parameterExp.Name).ToArray();
if (find.Length == 1) return find[0];
return _outsideTable[0];
}
}
public Expression ConvertStringPropertyToExpression(string property, bool fromFirstTable = false)
@ -276,7 +380,7 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0;
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, newexp, this, null, _whereGlobalFilter, null, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, newexp, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, true);
return new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
}
public string GetNestSelectSql(Expression select, string affield, Func<string, string> ToSql)
@ -762,6 +866,18 @@ namespace FreeSql.Internal.CommonProvider
}
public TSelect AsTable(Func<Type, string, string> tableRule)
{
if (_tableRules.Count == 1 && _diymemexpWithTempQuery != null && _diymemexpWithTempQuery is WithTempQueryParser tempQueryParser)
{
var oldTableRule = _tableRules[0];
var newTableRule = tableRule;
_tableRules.Clear();
tableRule = (type, old) =>
{
var tbname = newTableRule(type, null);
if (tbname != null) return tbname;
return oldTableRule(type, old);
};
}
if (tableRule != null) _tableRules.Add(tableRule);
return this as TSelect;
}
@ -796,7 +912,7 @@ namespace FreeSql.Internal.CommonProvider
if (condition == false) return this as TSelect;
Expression exp = ConvertStringPropertyToExpression(property);
if (exp == null) return this as TSelect;
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null);
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
if (isAscending) return this.OrderBy(field);
return this.OrderBy($"{field} DESC");
}
@ -930,7 +1046,7 @@ namespace FreeSql.Internal.CommonProvider
return new string[0];
}
var sql = _commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp, null, null, _params);
var sql = _commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp, _diymemexpWithTempQuery, null, _params);
sb.Append(sql);
}
@ -1042,6 +1158,19 @@ namespace FreeSql.Internal.CommonProvider
return this as TSelect;
}
public ISelect<TDto> InternalWithTempQuery<TDto>(Expression selector)
{
if (_orm.CodeFirst.IsAutoSyncStructure)
(_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true);
var ret = (_orm as BaseDbProvider).CreateSelectProvider<TDto>(null) as Select1Provider<TDto>;
if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto));
var parser = new WithTempQueryParser(this, null, selector, ret._tables[0]);
var sql = $"\r\n{this.ToSql(parser._insideSelectList[0].InsideField)}";
ret.WithSql(sql);
ret._diymemexpWithTempQuery = parser;
return ret;
}
public bool Any()
{
this.Limit(1);
@ -1079,6 +1208,7 @@ namespace FreeSql.Internal.CommonProvider
public List<T1> ToList() => ToList(false);
public virtual List<T1> ToList(bool includeNestedMembers)
{
if (_diymemexpWithTempQuery != null) return this.ToListMapReaderPrivate<T1>((_diymemexpWithTempQuery as WithTempQueryParser)._insideSelectList[0].InsideAf, null);
if (_selectExpression != null) return this.InternalToList<T1>(_selectExpression);
return this.ToListPrivate(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null);
}
@ -1123,6 +1253,7 @@ namespace FreeSql.Internal.CommonProvider
public Task<List<T1>> ToListAsync(CancellationToken cancellationToken = default) => ToListAsync(false, cancellationToken);
public virtual Task<List<T1>> ToListAsync(bool includeNestedMembers = false, CancellationToken cancellationToken = default)
{
if (_diymemexpWithTempQuery != null) return this.ToListMapReaderPrivateAsync<T1>((_diymemexpWithTempQuery as WithTempQueryParser)._insideSelectList[0].InsideAf, null, cancellationToken);
if (_selectExpression != null) return this.InternalToListAsync<T1>(_selectExpression, cancellationToken);
return this.ToListPrivateAsync(includeNestedMembers == false ? this.GetAllFieldExpressionTreeLevel2() : this.GetAllFieldExpressionTreeLevelAll(), null, cancellationToken);
}

View File

@ -28,7 +28,7 @@ namespace FreeSql.Internal.CommonProvider
var property = properties[propIdx];
var exp = ConvertStringPropertyToExpression(property);
if (exp == null) throw new Exception(CoreStrings.Property_Cannot_Find(property));
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null);
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
if (propIdx > 0) sbfield.Append(", ");
sbfield.Append(field);
//if (field != property)
@ -547,13 +547,21 @@ namespace FreeSql.Internal.CommonProvider
static EventHandler<Aop.AuditDataReaderEventArgs> _OldAuditDataReaderHandler;
public GetAllFieldExpressionTreeInfo GetAllFieldExpressionTreeLevel2(bool isRereadSql = true)
{
if (_diymemexpWithTempQuery != null)
{
return new GetAllFieldExpressionTreeInfo
{
Field = "*",
Read = (orm, dr) => throw new Exception("GetAllFieldExpressionTreeInfo.Read Is Null")
};
}
if (_selectExpression != null) //ToSql
{
var af = this.GetExpressionField(_selectExpression);
return new GetAllFieldExpressionTreeInfo
{
Field = af.field,
Read = (dr, idx) => throw new Exception("GetAllFieldExpressionTreeInfo.Read Is Null")
Read = (orm, dr) => throw new Exception("GetAllFieldExpressionTreeInfo.Read Is Null")
};
}
if (_OldAuditDataReaderHandler != _orm.Aop.AuditDataReaderHandler)
@ -751,7 +759,7 @@ namespace FreeSql.Internal.CommonProvider
protected double InternalAvg(Expression exp)
{
var field = $"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0)
{
var list = this.ToList<double>(field);
@ -764,7 +772,7 @@ namespace FreeSql.Internal.CommonProvider
}
protected TMember InternalMax<TMember>(Expression exp)
{
var field = $"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0) return this.ToList<TMember>(field).Max();
var sql = GetNestSelectSql(exp, field, ToSql);
@ -772,7 +780,7 @@ namespace FreeSql.Internal.CommonProvider
}
protected TMember InternalMin<TMember>(Expression exp)
{
var field = $"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0) return this.ToList<TMember>(field).Min();
var sql = GetNestSelectSql(exp, field, ToSql);
@ -780,7 +788,7 @@ namespace FreeSql.Internal.CommonProvider
}
protected decimal InternalSum(Expression exp)
{
var field = $"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0) return this.ToList<decimal>(field).Sum();
var sql = GetNestSelectSql(exp, field, ToSql);
@ -793,14 +801,14 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = -10000; //临时规则,不返回 as1
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, columns, null, null, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, columns, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
var sql = field.ToString();
this.GroupBy(sql.Length > 0 ? sql.Substring(2) : null);
return new SelectGroupingProvider<TKey, TValue>(_orm, this, map, sql, _commonExpression, _tables);
}
public TSelect InternalJoin(Expression exp, SelectTableInfoType joinType)
{
_commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, null, _whereGlobalFilter);
_commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, _diymemexpWithTempQuery, _whereGlobalFilter);
return this as TSelect;
}
protected TSelect InternalJoin<T2>(Expression exp, SelectTableInfoType joinType)
@ -808,7 +816,7 @@ namespace FreeSql.Internal.CommonProvider
var tb = _commonUtils.GetTableByEntity(typeof(T2));
if (tb == null) throw new ArgumentException(CoreStrings.T2_Type_Error);
_tables.Add(new SelectTableInfo { Table = tb, Alias = $"IJ{_tables.Count}", On = null, Type = joinType });
_commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, null, _whereGlobalFilter);
_commonExpression.ExpressionJoinLambda(_tables, _tableRule, joinType, exp, _diymemexpWithTempQuery, _whereGlobalFilter);
return this as TSelect;
}
protected TSelect InternalOrderBy(Expression column)
@ -819,10 +827,10 @@ namespace FreeSql.Internal.CommonProvider
case ExpressionType.New:
var newExp = column as NewExpression;
if (newExp == null) break;
for (var a = 0; a < newExp.Members.Count; a++) this.OrderBy(_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, newExp.Arguments[a], true, null));
for (var a = 0; a < newExp.Members.Count; a++) this.OrderBy(_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, newExp.Arguments[a], true, _diymemexpWithTempQuery));
return this as TSelect;
}
return this.OrderBy(_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, column, true, null));
return this.OrderBy(_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, column, true, _diymemexpWithTempQuery));
}
protected TSelect InternalOrderByDescending(Expression column)
{
@ -832,10 +840,10 @@ namespace FreeSql.Internal.CommonProvider
case ExpressionType.New:
var newExp = column as NewExpression;
if (newExp == null) break;
for (var a = 0; a < newExp.Members.Count; a++) this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, newExp.Arguments[a], true, null)} DESC");
for (var a = 0; a < newExp.Members.Count; a++) this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, newExp.Arguments[a], true, _diymemexpWithTempQuery)} DESC");
return this as TSelect;
}
return this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, column, true, null)} DESC");
return this.OrderBy($"{_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, column, true, _diymemexpWithTempQuery)} DESC");
}
public List<TReturn> InternalToList<TReturn>(Expression select)
@ -845,7 +853,7 @@ namespace FreeSql.Internal.CommonProvider
var index = 0;
var findSubSelectMany = new List<Expression>();
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, this, null, _whereGlobalFilter, null, findSubSelectMany, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, findSubSelectMany, true);
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
if (findSubSelectMany.Any() == false) return this.ToListMapReaderPrivate<TReturn>(af, new ReadAnonymousTypeOtherInfo[0]);
@ -862,7 +870,7 @@ namespace FreeSql.Internal.CommonProvider
{
var otherMap = new ReadAnonymousTypeInfo();
field.Clear();
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, find.Item1, this, null, _whereGlobalFilter, null, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, find.Item1, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, true);
var otherRet = new List<object>();
var otherAf = new ReadAnonymousTypeOtherInfo(field.ToString(), otherMap, otherRet);
afs.Add(NativeTuple.Create(find.Item1, find.Item2, otherAf));
@ -947,7 +955,7 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = -10000; //临时规则,不返回 as1
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, null, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
var childs = map.Childs;
if (childs.Any() == false) throw new ArgumentException(CoreStrings.InsertInto_No_Property_Selected(typeof(TTargetEntity).DisplayCsharp()));
@ -1028,7 +1036,7 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = 0;
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, null, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
if (GetTableRuleUnions().Count <= 1) return this.ToListMapReader<TReturn>(af).FirstOrDefault();
@ -1041,7 +1049,7 @@ namespace FreeSql.Internal.CommonProvider
}
}
public TSelect InternalWhere(Expression exp) => exp == null ? this as TSelect : this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp, null, _whereGlobalFilter, _params));
public TSelect InternalWhere(Expression exp) => exp == null ? this as TSelect : this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
#region Async
#if net40
@ -1055,7 +1063,7 @@ namespace FreeSql.Internal.CommonProvider
var property = properties[propIdx];
var exp = ConvertStringPropertyToExpression(property);
if (exp == null) throw new Exception(CoreStrings.Property_Cannot_Find(property));
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null);
var field = _commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery);
if (propIdx > 0) sbfield.Append(", ");
sbfield.Append(field);
//if (field != property)
@ -1299,7 +1307,7 @@ namespace FreeSql.Internal.CommonProvider
async protected Task<double> InternalAvgAsync(Expression exp, CancellationToken cancellationToken)
{
var field = $"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0)
{
var list = await this.ToListAsync<double>(field, cancellationToken);
@ -1312,7 +1320,7 @@ namespace FreeSql.Internal.CommonProvider
}
async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp, CancellationToken cancellationToken)
{
var field = $"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0) return (await this.ToListAsync<TMember>(field, cancellationToken)).Max();
var sql = GetNestSelectSql(exp, field, ToSql);
@ -1320,7 +1328,7 @@ namespace FreeSql.Internal.CommonProvider
}
async protected Task<TMember> InternalMinAsync<TMember>(Expression exp, CancellationToken cancellationToken)
{
var field = $"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0) return (await this.ToListAsync<TMember>(field, cancellationToken)).Min();
var sql = GetNestSelectSql(exp, field, ToSql);
@ -1328,7 +1336,7 @@ namespace FreeSql.Internal.CommonProvider
}
async protected Task<decimal> InternalSumAsync(Expression exp, CancellationToken cancellationToken)
{
var field = $"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}";
var field = $"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, _tableRule, null, SelectTableInfoType.From, exp, true, _diymemexpWithTempQuery)}){_commonUtils.FieldAsAlias("as1")}";
if (_limit <= 0 && _skip <= 0) return (await this.ToListAsync<decimal>(field, cancellationToken)).Sum();
var sql = GetNestSelectSql(exp, field, ToSql);
@ -1344,7 +1352,7 @@ namespace FreeSql.Internal.CommonProvider
var index = 0;
var findSubSelectMany = new List<Expression>();
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, this, null, _whereGlobalFilter, null, findSubSelectMany, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, findSubSelectMany, true);
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
if (findSubSelectMany.Any() == false) return await this.ToListMapReaderPrivateAsync<TReturn>(af, new ReadAnonymousTypeOtherInfo[0], cancellationToken);
@ -1361,7 +1369,7 @@ namespace FreeSql.Internal.CommonProvider
{
var otherMap = new ReadAnonymousTypeInfo();
field.Clear();
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, find.Item1, this, null, _whereGlobalFilter, null, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, find.Item1, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, true);
var otherRet = new List<object>();
var otherAf = new ReadAnonymousTypeOtherInfo(field.ToString(), otherMap, otherRet);
afs.Add(NativeTuple.Create(find.Item1, find.Item2, otherAf));
@ -1521,7 +1529,7 @@ namespace FreeSql.Internal.CommonProvider
var field = new StringBuilder();
var index = 0;
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, null, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select, null, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, false); //不走 DTO 映射,不处理 IncludeMany
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
if (GetTableRuleUnions().Count <= 1) return (await this.ToListMapReaderAsync<TReturn>(af, cancellationToken)).FirstOrDefault();

View File

@ -27,16 +27,14 @@ namespace FreeSql.Internal.CommonProvider
protected ISelect<T1> InternalFrom(LambdaExpression lambdaExp)
{
if (lambdaExp != null)
if (lambdaExp == null) return this;
for (var a = 1; a < lambdaExp.Parameters.Count; a++)
{
for (var a = 1; a < lambdaExp.Parameters.Count; a++)
{
var tb = _commonUtils.GetTableByEntity(lambdaExp.Parameters[a].Type);
if (tb == null) throw new ArgumentException(CoreStrings.Type_Error_Name(lambdaExp.Parameters[a].Name));
_tables.Add(new SelectTableInfo { Table = tb, Alias = lambdaExp.Parameters[a].Name, On = null, Type = SelectTableInfoType.From });
}
var tb = _commonUtils.GetTableByEntity(lambdaExp.Parameters[a].Type);
if (tb == null) throw new ArgumentException(CoreStrings.Type_Error_Name(lambdaExp.Parameters[a].Name));
_tables.Add(new SelectTableInfo { Table = tb, Alias = lambdaExp.Parameters[a].Name, On = null, Type = SelectTableInfoType.From });
}
var exp = lambdaExp?.Body;
var exp = lambdaExp.Body;
if (exp?.NodeType == ExpressionType.Call)
{
var expCall = exp as MethodCallExpression;
@ -60,7 +58,7 @@ namespace FreeSql.Internal.CommonProvider
case "OrderBy":
if (expCall.Arguments.Count == 2 && expCall.Arguments[0].Type == typeof(bool))
{
var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, _tableRule, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, _tableRule, null, SelectTableInfoType.From, expCall.Arguments[0], false, _diymemexpWithTempQuery);
if (ifcond == "1" || ifcond == "'t'")
this.InternalOrderBy(expCall.Arguments.LastOrDefault());
break;
@ -70,7 +68,7 @@ namespace FreeSql.Internal.CommonProvider
case "OrderByDescending":
if (expCall.Arguments.Count == 2 && expCall.Arguments[0].Type == typeof(bool))
{
var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, _tableRule, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, _tableRule, null, SelectTableInfoType.From, expCall.Arguments[0], false, _diymemexpWithTempQuery);
if (ifcond == "1" || ifcond == "'t'" || ifcond == "-1")//MsAccess -1
this.InternalOrderByDescending(expCall.Arguments.LastOrDefault());
break;
@ -108,22 +106,47 @@ namespace FreeSql.Internal.CommonProvider
return this.InternalAvg(column?.Body);
}
public abstract ISelect<T1, T2> From<T2>(Expression<Func<ISelectFromExpression<T1>, T2, ISelectFromExpression<T1>>> exp) where T2 : class;
public abstract ISelect<T1, T2, T3> From<T2, T3>(Expression<Func<ISelectFromExpression<T1>, T2, T3, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class;
public abstract ISelect<T1, T2, T3, T4> From<T2, T3, T4>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class;
public abstract ISelect<T1, T2, T3, T4, T5> From<T2, T3, T4, T5>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6> From<T2, T3, T4, T5, T6>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7> From<T2, T3, T4, T5, T6, T7>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8> From<T2, T3, T4, T5, T6, T7, T8>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> From<T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> From<T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class;
public abstract ISelect<T1, T2> From<T2>(Expression<Func<ISelectFromExpression<T1>, T2, ISelectFromExpression<T1>>> exp = null) where T2 : class;
public abstract ISelect<T1, T2, T3> From<T2, T3>(Expression<Func<ISelectFromExpression<T1>, T2, T3, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class;
public abstract ISelect<T1, T2, T3, T4> From<T2, T3, T4>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class;
public abstract ISelect<T1, T2, T3, T4, T5> From<T2, T3, T4, T5>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6> From<T2, T3, T4, T5, T6>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7> From<T2, T3, T4, T5, T6, T7>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8> From<T2, T3, T4, T5, T6, T7, T8>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> From<T2, T3, T4, T5, T6, T7, T8, T9>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> From<T2, T3, T4, T5, T6, T7, T8, T9, T10>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, ISelectFromExpression<T1>>> exp) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class;
public abstract ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> From<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(Expression<Func<ISelectFromExpression<T1>, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, ISelectFromExpression<T1>>> exp = null) where T2 : class where T3 : class where T4 : class where T5 : class where T6 : class where T7 : class where T8 : class where T9 : class where T10 : class where T11 : class where T12 : class where T13 : class where T14 : class where T15 : class where T16 : class;
public ISelect<T1, T2> FromQuery<T2>(ISelect<T2> select2) where T2 : class
{
var ret = From<T2>();
var retsp = ret as Select0Provider;
var rettbs = retsp._tables;
if (rettbs[1].Table == null) rettbs[1].Table = TableInfo.GetDefaultTable(typeof(T2));
(_diymemexpWithTempQuery as WithTempQueryParser)?.Append(select2, rettbs[1]);
var select2sp = select2 as Select0Provider;
string sql2 = null;
if (select2sp._diymemexpWithTempQuery == null)
sql2 = select2?.ToSql(a => a, FieldAliasOptions.AsProperty);
else
{
if (select2sp._tableRule != null && select2sp.IsDefaultSqlContent == true)
{
sql2 = select2sp._tableRule(select2sp._tables[0].Table.Type, null);
if (sql2.StartsWith("(") && sql2.EndsWith(")")) sql2 = sql2.Substring(1, sql2.Length - 2);
}
if (string.IsNullOrWhiteSpace(sql2))
sql2 = select2?.ToSql("*");
}
return ret.WithSql(null, sql2);
}
public ISelectGrouping<TKey, T1> GroupBy<TKey>(Expression<Func<T1, TKey>> columns)
{
@ -197,7 +220,7 @@ namespace FreeSql.Internal.CommonProvider
var map = new ReadAnonymousTypeInfo();
var field = new StringBuilder();
var index = 0;
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select.Body, this, null, _whereGlobalFilter, findIncludeMany, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select.Body, this, _diymemexpWithTempQuery, _whereGlobalFilter, findIncludeMany, null, true);
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
if (findIncludeMany.Any() == false) return this.ToListMapReaderPrivate<TReturn>(af, null);
@ -241,7 +264,7 @@ namespace FreeSql.Internal.CommonProvider
var otherMap = new ReadAnonymousTypeInfo();
field.Clear();
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, otherNewInit, this, null, _whereGlobalFilter, null, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, otherNewInit, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, true);
var otherRet = new List<object>();
var otherAf = new ReadAnonymousTypeOtherInfo(field.ToString(), otherMap, otherRet);
@ -396,6 +419,8 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<T1, TDto>> selector) => InternalWithTempQuery<TDto>(selector);
public bool Any(Expression<Func<T1, bool>> exp)
{
var oldwhere = _where.ToString();
@ -440,7 +465,7 @@ namespace FreeSql.Internal.CommonProvider
case TableRefType.OneToOne:
_isIncluded = true;
var curTb = _commonUtils.GetTableByEntity(exp.Type);
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(exp, curTb.Properties[curTb.ColumnsByCs.First().Value.CsName]), null, null, null);
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(exp, curTb.Properties[curTb.ColumnsByCs.First().Value.CsName]), _diymemexpWithTempQuery, null, null);
break;
}
return this;
@ -459,7 +484,7 @@ namespace FreeSql.Internal.CommonProvider
_isIncluded = true;
_tables[0].Parameter = navigateSelector.Parameters[0];
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(expBody, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), null, null, null);
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(expBody, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), _diymemexpWithTempQuery, null, null);
return this;
}
@ -536,7 +561,7 @@ namespace FreeSql.Internal.CommonProvider
if (tbNav == null) throw new Exception(CoreStrings.TypeError_CannotUse_IncludeMany(typeof(TNavigate).FullName));
if (collMem.Expression.NodeType != ExpressionType.Parameter)
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(collMem.Expression, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), null, null, null);
_commonExpression.ExpressionWhereLambda(_tables, _tableRule, Expression.MakeMemberAccess(collMem.Expression, tb.Properties[tb.ColumnsByCs.First().Value.CsName]), _diymemexpWithTempQuery, null, null);
TableRef tbref = null;
var tbrefOneToManyColumns = new List<List<MemberExpression>>(); //临时 OneToMany 三个表关联,第三个表需要前两个表确定
@ -1377,7 +1402,7 @@ namespace FreeSql.Internal.CommonProvider
var map = new ReadAnonymousTypeInfo();
var field = new StringBuilder();
var index = 0;
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select.Body, this, null, _whereGlobalFilter, findIncludeMany, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, map, ref index, select.Body, this, _diymemexpWithTempQuery, _whereGlobalFilter, findIncludeMany, null, true);
var af = new ReadAnonymousTypeAfInfo(map, field.Length > 0 ? field.Remove(0, 2).ToString() : null);
if (findIncludeMany.Any() == false) return await this.ToListMapReaderPrivateAsync<TReturn>(af, null, cancellationToken);
@ -1410,7 +1435,7 @@ namespace FreeSql.Internal.CommonProvider
var otherMap = new ReadAnonymousTypeInfo();
field.Clear();
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, otherNewInit, this, null, _whereGlobalFilter, null, null, true);
_commonExpression.ReadAnonymousField(_tables, _tableRule, field, otherMap, ref index, otherNewInit, this, _diymemexpWithTempQuery, _whereGlobalFilter, null, null, true);
var otherRet = new List<object>();
var otherAf = new ReadAnonymousTypeOtherInfo(field.ToString(), otherMap, otherRet);

View File

@ -35,6 +35,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2>.WithTempQuery<TDto>(Expression<Func<T1, T2, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2>.Avg<TMember>(Expression<Func<T1, T2, TMember>> column)
{
if (column == null) return default(double);
@ -171,14 +177,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2> ISelect<T1, T2>.WhereIf(bool condition, Expression<Func<T1, T2, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2>.Any(Expression<Func<T1, T2, bool>> exp)
@ -186,7 +192,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -201,6 +207,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2>).WithTempQuery<TDto>((Expression<Func<T1, T2, TDto>>)expModify);
}
double ISelect<T1, T2>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -388,7 +400,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -489,6 +501,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3>.Avg<TMember>(Expression<Func<T1, T2, T3, TMember>> column)
{
if (column == null) return default(double);
@ -625,14 +643,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3> ISelect<T1, T2, T3>.WhereIf(bool condition, Expression<Func<T1, T2, T3, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3>.Any(Expression<Func<T1, T2, T3, bool>> exp)
@ -640,7 +658,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -655,6 +673,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, TDto>>)expModify);
}
double ISelect<T1, T2, T3>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -842,7 +866,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -945,6 +969,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, TMember>> column)
{
if (column == null) return default(double);
@ -1081,14 +1111,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4> ISelect<T1, T2, T3, T4>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4>.Any(Expression<Func<T1, T2, T3, T4, bool>> exp)
@ -1096,7 +1126,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -1111,6 +1141,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -1298,7 +1334,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -1403,6 +1439,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, TMember>> column)
{
if (column == null) return default(double);
@ -1539,14 +1581,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5> ISelect<T1, T2, T3, T4, T5>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5>.Any(Expression<Func<T1, T2, T3, T4, T5, bool>> exp)
@ -1554,7 +1596,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -1569,6 +1611,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -1756,7 +1804,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -1863,6 +1911,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, TMember>> column)
{
if (column == null) return default(double);
@ -1999,14 +2053,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6> ISelect<T1, T2, T3, T4, T5, T6>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, bool>> exp)
@ -2014,7 +2068,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -2029,6 +2083,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -2216,7 +2276,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -2325,6 +2385,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, TMember>> column)
{
if (column == null) return default(double);
@ -2461,14 +2527,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7> ISelect<T1, T2, T3, T4, T5, T6, T7>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, bool>> exp)
@ -2476,7 +2542,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -2491,6 +2557,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -2678,7 +2750,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -2789,6 +2861,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TMember>> column)
{
if (column == null) return default(double);
@ -2925,14 +3003,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, bool>> exp)
@ -2940,7 +3018,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -2955,6 +3033,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -3142,7 +3226,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -3255,6 +3339,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TMember>> column)
{
if (column == null) return default(double);
@ -3391,14 +3481,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, bool>> exp)
@ -3406,7 +3496,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -3421,6 +3511,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -3608,7 +3704,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -3723,6 +3819,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TMember>> column)
{
if (column == null) return default(double);
@ -3859,14 +3961,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, bool>> exp)
@ -3874,7 +3976,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -3889,6 +3991,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -4076,7 +4184,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -4193,6 +4301,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TMember>> column)
{
if (column == null) return default(double);
@ -4329,14 +4443,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, bool>> exp)
@ -4344,7 +4458,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -4359,6 +4473,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -4546,7 +4666,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -4665,6 +4785,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TMember>> column)
{
if (column == null) return default(double);
@ -4801,14 +4927,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, bool>> exp)
@ -4816,7 +4942,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -4831,6 +4957,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -5018,7 +5150,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -5139,6 +5271,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TMember>> column)
{
if (column == null) return default(double);
@ -5275,14 +5413,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, bool>> exp)
@ -5290,7 +5428,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -5305,6 +5443,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -5492,7 +5636,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -5615,6 +5759,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TMember>> column)
{
if (column == null) return default(double);
@ -5751,14 +5901,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, bool>> exp)
@ -5766,7 +5916,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -5781,6 +5931,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -5968,7 +6124,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -6093,6 +6249,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TMember>> column)
{
if (column == null) return default(double);
@ -6229,14 +6391,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, bool>> exp)
@ -6244,7 +6406,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -6259,6 +6421,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -6446,7 +6614,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}
@ -6573,6 +6741,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>.WithTempQuery<TDto>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>.Avg<TMember>(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TMember>> column)
{
if (column == null) return default(double);
@ -6709,14 +6883,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>.WhereIf(bool condition, Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>.Any(Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, bool>> exp)
@ -6724,7 +6898,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -6739,6 +6913,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple
ISelect<TDto> ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>.WithTempQuery<TDto>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>).WithTempQuery<TDto>((Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TDto>>)expModify);
}
double ISelect<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>.Avg<TMember>(Expression<Func<HzyTuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -6926,7 +7106,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}

View File

@ -32,7 +32,12 @@ namespace FreeSql.Internal.CommonProvider
public override string ParseExp(Expression[] members)
{
if (members.Any() == false) return _map.DbField;
ParseExpMapResult = null;
if (members.Any() == false)
{
ParseExpMapResult = _map;
return _map.DbField;
}
var parentName = ((members.FirstOrDefault() as MemberExpression)?.Expression as MemberExpression)?.Member.Name;
switch (parentName)
{
@ -43,6 +48,7 @@ namespace FreeSql.Internal.CommonProvider
read = read.Childs.Where(z => z.CsName == (members[a] as MemberExpression)?.Member.Name).FirstOrDefault();
if (read == null) return null;
}
ParseExpMapResult = read;
return read.DbField;
case "Value":
var tb = _tables.First();
@ -192,6 +198,19 @@ namespace FreeSql.Internal.CommonProvider
}
public string ToSql(string field) => InternalToSql(field);
public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TDto>> selector)
{
if (_orm.CodeFirst.IsAutoSyncStructure)
(_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TDto)); //._dicSyced.TryAdd(typeof(TReturn), true);
var ret = (_orm as BaseDbProvider).CreateSelectProvider<TDto>(null) as Select1Provider<TDto>;
if (ret._tables[0].Table == null) ret._tables[0].Table = TableInfo.GetDefaultTable(typeof(TDto));
var parser = new Select0Provider.WithTempQueryParser(_select, this, selector, ret._tables[0]);
var sql = this.ToSql(parser._insideSelectList[0].InsideField);
ret.WithSql(sql);
ret._diymemexpWithTempQuery = parser;
return ret;
}
public ISelectGrouping<TKey, TValue> Skip(int offset)
{
_groupBySkip = offset;

View File

@ -120,6 +120,8 @@ public interface ISelect<<#=NewStr #>> : ISelect0<ISelect<<#=NewStr #>>, T1> <#=
ISelect<<#=NewStr #>> WithSql(<#=string.Join(",",WithSql)#>, object parms = null);
ISelect<TDto> WithTempQuery<TDto>(Expression<Func<<#=NewStr #>, TDto>> selector);
#region HzyTuple 元组
bool Any(Expression<Func<HzyTuple<<#=NewStr #>>, bool>> exp);
@ -150,6 +152,8 @@ public interface ISelect<<#=NewStr #>> : ISelect0<ISelect<<#=NewStr #>>, T1> <#=
ISelect<<#=NewStr #>> OrderByDescending<TMember>(Expression<Func<HzyTuple<<#=NewStr #>>, TMember>> column);
ISelect<<#=NewStr #>> OrderByIf<TMember>(bool condition, Expression<Func<HzyTuple<<#=NewStr #>>, TMember>> column, bool descending = false);
ISelect<TDto> WithTempQuery<TDto>(Expression<Func<HzyTuple<<#=NewStr #>>, TDto>> selector);
#endregion
}

View File

@ -83,6 +83,12 @@ namespace FreeSql.Internal.CommonProvider
return this;
}
ISelect<TDto> ISelect<<#=NewStr #>>.WithTempQuery<TDto>(Expression<Func<<#=NewStr #>, TDto>> selector)
{
for (var a = 0; a < selector.Parameters.Count; a++) _tables[a].Parameter = selector.Parameters[a];
return this.InternalWithTempQuery<TDto>(selector);
}
double ISelect<<#=NewStr #>>.Avg<TMember>(Expression<Func<<#=NewStr #>, TMember>> column)
{
if (column == null) return default(double);
@ -219,14 +225,14 @@ namespace FreeSql.Internal.CommonProvider
{
if (exp == null) return this.Where(null);
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
ISelect<<#=NewStr #>> ISelect<<#=NewStr #>>.WhereIf(bool condition, Expression<Func<<#=NewStr #>, bool>> exp)
{
if (condition == false || exp == null) return this;
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params));
return this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params));
}
bool ISelect<<#=NewStr #>>.Any(Expression<Func<<#=NewStr #>, bool>> exp)
@ -234,7 +240,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return this.Any();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).Any();
var ret = this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).Any();
_where.Clear().Append(oldwhere);
return ret;
}
@ -249,6 +255,12 @@ namespace FreeSql.Internal.CommonProvider
#region HzyTuple 元组
ISelect<TDto> ISelect<<#=NewStr #>>.WithTempQuery<TDto>(Expression<Func<HzyTuple<<#=NewStr #>>, TDto>> selector)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(selector, _tables);
return (this as ISelect<<#=NewStr #>>).WithTempQuery<TDto>((Expression<Func<<#=NewStr #>, TDto>>)expModify);
}
double ISelect<<#=NewStr #>>.Avg<TMember>(Expression<Func<HzyTuple<<#=NewStr #>>, TMember>> column)
{
var expModify = new CommonExpression.ReplaceHzyTupleToMultiParam().Modify(column, _tables);
@ -436,7 +448,7 @@ namespace FreeSql.Internal.CommonProvider
if (exp == null) return await this.AnyAsync();
for (var a = 0; a < exp.Parameters.Count; a++) _tables[a].Parameter = exp.Parameters[a];
var oldwhere = _where.ToString();
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, null, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
var ret = await this.Where(_commonExpression.ExpressionWhereLambda(_tables, _tableRule, exp?.Body, _diymemexpWithTempQuery, _whereGlobalFilter, _params)).AnyAsync(cancellationToken);
_where.Clear().Append(oldwhere);
return ret;
}

View File

@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
@ -15,6 +16,7 @@ namespace FreeSql.Internal.Model
public Type CsType { get; set; }
public Type MapType { get; set; }
public string DbField { get; set; }
public string DbNestedField { get; set; }
public ConstructorInfo Consturctor { get; set; }
public List<ReadAnonymousTypeInfo> Childs = new List<ReadAnonymousTypeInfo>();
public TableInfo Table { get; set; }
@ -31,12 +33,37 @@ namespace FreeSql.Internal.Model
target.CsType = CsType;
target.MapType = MapType;
target.DbField = DbField;
target.DbNestedField = DbNestedField;
target.Consturctor = Consturctor;
target.Childs = Childs;
LocalEachCopyChilds(Childs, target.Childs);
target.Table = Table;
target.IsEntity = IsEntity;
target.IsDefaultCtor = IsDefaultCtor;
target.IncludeManyKey = IncludeManyKey;
void LocalEachCopyChilds(List<ReadAnonymousTypeInfo> from, List<ReadAnonymousTypeInfo> to)
{
foreach(var fromChild in from)
{
var toChild = new ReadAnonymousTypeInfo();
fromChild.CopyTo(toChild);
to.Add(toChild);
}
}
}
public List<ReadAnonymousTypeInfo> GetAllChilds(int maxDepth = 10)
{
if (maxDepth <= 0) return new List<ReadAnonymousTypeInfo>();
var allchilds = new List<ReadAnonymousTypeInfo>();
foreach (var child in Childs)
{
if (child.Childs.Any())
allchilds.AddRange(child.GetAllChilds(maxDepth - 1));
else
allchilds.Add(child);
}
return allchilds;
}
}
public class ReadAnonymousTypeAfInfo

View File

@ -50,6 +50,18 @@ namespace FreeSql.Internal.Model
}
public IEnumerable<KeyValuePair<string, TableRef>> GetAllTableRef() => _refs;
public static TableInfo GetDefaultTable(Type type) => new TableInfo
{
CsName = type.Name,
DbName = type.Name,
DisableSyncStructure = true,
Primarys = new ColumnInfo[0],
ColumnsByPosition = new ColumnInfo[0],
ColumnsByCanUpdateDbUpdateValue = new ColumnInfo[0],
Properties = type.GetPropertiesDictIgnoreCase(),
Type = type,
};
//public void CopyTo(TableInfo target)
//{
// target.Type = this.Type;