diff --git a/Examples/base_entity/AspNetRoleClaims/ids_api.db b/Examples/base_entity/AspNetRoleClaims/ids_api.db index de4c821a..2d6fa55d 100644 Binary files a/Examples/base_entity/AspNetRoleClaims/ids_api.db and b/Examples/base_entity/AspNetRoleClaims/ids_api.db differ diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 9d022d95..8df34c98 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -864,9 +864,10 @@ namespace base_entity var testsublist2 = fsql.Select() .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), }); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 594fbad3..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -791,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index abda9cfe..9ee27a8e 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2720,6 +2720,14 @@ 选择列 + + + 执行SQL查询,返回指定字段的记录的第一条记录,记录不存在时返回 TReturn 默认值 + + + + + 【linq to sql】专用方法,不建议直接使用 diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index fd22094b..811cbe02 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -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; + 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]); diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs index f2ac8e0c..81dd39d6 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0Provider.cs @@ -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;