mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 优化 WithTempQuery + ToList 使用子查询;
This commit is contained in:
parent
df3073819d
commit
a7c3783e8a
Binary file not shown.
@ -864,9 +864,10 @@ namespace base_entity
|
|||||||
|
|
||||||
var testsublist2 = fsql.Select<UserGroup>()
|
var testsublist2 = fsql.Select<UserGroup>()
|
||||||
.GroupBy(a => new { a.Id })
|
.GroupBy(a => new { a.Id })
|
||||||
|
.WithTempQuery(a => a.Key)
|
||||||
.First(a => new
|
.First(a => new
|
||||||
{
|
{
|
||||||
a.Id,
|
id = a,
|
||||||
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
|
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
|
||||||
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
|
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
|
||||||
});
|
});
|
||||||
|
@ -733,6 +733,15 @@
|
|||||||
<param name="modelBuilder"></param>
|
<param name="modelBuilder"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
|
||||||
|
<summary>
|
||||||
|
根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
|
||||||
|
</summary>
|
||||||
|
<param name="codeFirst"></param>
|
||||||
|
<param name="assembly"></param>
|
||||||
|
<param name="predicate"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
||||||
<summary>
|
<summary>
|
||||||
创建普通数据上下文档对象
|
创建普通数据上下文档对象
|
||||||
@ -791,5 +800,14 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||||
|
<summary>
|
||||||
|
批量注入 Repository,可以参考代码自行调整
|
||||||
|
</summary>
|
||||||
|
<param name="services"></param>
|
||||||
|
<param name="globalDataFilter"></param>
|
||||||
|
<param name="assemblies"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -2720,6 +2720,14 @@
|
|||||||
<param name="select">选择列</param>
|
<param name="select">选择列</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.ISelectGrouping`2.First``1(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},``0}})">
|
||||||
|
<summary>
|
||||||
|
执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值
|
||||||
|
</summary>
|
||||||
|
<typeparam name="TReturn"></typeparam>
|
||||||
|
<param name="select"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSql.ISelectGrouping`2.Select``1(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},``0}})">
|
<member name="M:FreeSql.ISelectGrouping`2.Select``1(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},``0}})">
|
||||||
<summary>
|
<summary>
|
||||||
【linq to sql】专用方法,不建议直接使用
|
【linq to sql】专用方法,不建议直接使用
|
||||||
|
@ -955,12 +955,12 @@ namespace FreeSql.Internal
|
|||||||
return $"not({ExpressionLambdaToSql(notExp, tsc)})";
|
return $"not({ExpressionLambdaToSql(notExp, tsc)})";
|
||||||
case ExpressionType.Quote: return ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc);
|
case ExpressionType.Quote: return ExpressionLambdaToSql((exp as UnaryExpression)?.Operand, tsc);
|
||||||
case ExpressionType.Lambda: return ExpressionLambdaToSql((exp as LambdaExpression)?.Body, 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.Invoke: //#1378
|
||||||
case ExpressionType.Invoke:
|
|
||||||
var invokeExp = exp as InvocationExpression;
|
var invokeExp = exp as InvocationExpression;
|
||||||
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
|
|
||||||
var invokeReplaceExp = invokeExp.Expression;
|
var invokeReplaceExp = invokeExp.Expression;
|
||||||
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
|
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
|
||||||
|
if (invokeLambdaExp == null) return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
|
||||||
|
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
|
||||||
var len = Math.Min(invokeExp.Arguments.Count, invokeLambdaExp.Parameters.Count);
|
var len = Math.Min(invokeExp.Arguments.Count, invokeLambdaExp.Parameters.Count);
|
||||||
for (var a = 0; a < len; a++)
|
for (var a = 0; a < len; a++)
|
||||||
invokeReplaceExp = invokeReplaceVistor.Modify(invokeReplaceExp, invokeLambdaExp.Parameters[a], invokeExp.Arguments[a]);
|
invokeReplaceExp = invokeReplaceVistor.Modify(invokeReplaceExp, invokeLambdaExp.Parameters[a], invokeExp.Arguments[a]);
|
||||||
|
@ -493,6 +493,12 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var tb = _select._tables.Find(a => a.Parameter == firstExp)?.Table;
|
var tb = _select._tables.Find(a => a.Parameter == firstExp)?.Table;
|
||||||
if (tb == null) return base.VisitMember(node);
|
if (tb == null) return base.VisitMember(node);
|
||||||
|
|
||||||
|
if (tb.Columns.Any() == false && _select._diymemexpWithTempQuery != null) //匿名类,嵌套查询 DTO
|
||||||
|
{
|
||||||
|
Result.Add(NativeTuple.Create(node, default(ColumnInfo)));
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
while (exps.Any())
|
while (exps.Any())
|
||||||
{
|
{
|
||||||
var memExp = exps.Pop() as MemberExpression;
|
var memExp = exps.Pop() as MemberExpression;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user