mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 10:42:52 +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>()
|
||||
.GroupBy(a => new { a.Id })
|
||||
.WithTempQuery(a => a.Key)
|
||||
.First(a => new
|
||||
{
|
||||
a.Id,
|
||||
id = a,
|
||||
list = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(),
|
||||
list2 = userRepository.Select.Where(b => b.GroupId == a.Id).ToList(b => b.Nickname),
|
||||
});
|
||||
|
@ -733,6 +733,15 @@
|
||||
<param name="modelBuilder"></param>
|
||||
<returns></returns>
|
||||
</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)">
|
||||
<summary>
|
||||
创建普通数据上下文档对象
|
||||
@ -791,5 +800,14 @@
|
||||
<param name="that"></param>
|
||||
<returns></returns>
|
||||
</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>
|
||||
</doc>
|
||||
|
@ -2720,6 +2720,14 @@
|
||||
<param name="select">选择列</param>
|
||||
<returns></returns>
|
||||
</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}})">
|
||||
<summary>
|
||||
【linq to sql】专用方法,不建议直接使用
|
||||
|
@ -955,12 +955,12 @@ 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.Invoke:
|
||||
case ExpressionType.Invoke: //#1378
|
||||
var invokeExp = exp as InvocationExpression;
|
||||
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
|
||||
var invokeReplaceExp = invokeExp.Expression;
|
||||
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);
|
||||
for (var a = 0; a < len; 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;
|
||||
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())
|
||||
{
|
||||
var memExp = exps.Pop() as MemberExpression;
|
||||
|
Loading…
x
Reference in New Issue
Block a user