From a7c3783e8a3dbc1c732eb34f91367b13d19610c2 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 2 Mar 2023 19:48:34 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20WithTempQuery=20+=20To?= =?UTF-8?q?List=20=E4=BD=BF=E7=94=A8=E5=AD=90=E6=9F=A5=E8=AF=A2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base_entity/AspNetRoleClaims/ids_api.db | Bin 266240 -> 311296 bytes Examples/base_entity/Program.cs | 3 ++- FreeSql.DbContext/FreeSql.DbContext.xml | 18 ++++++++++++++++++ FreeSql/FreeSql.xml | 8 ++++++++ FreeSql/Internal/CommonExpression.cs | 8 ++++---- .../SelectProvider/Select0Provider.cs | 6 ++++++ 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Examples/base_entity/AspNetRoleClaims/ids_api.db b/Examples/base_entity/AspNetRoleClaims/ids_api.db index de4c821a4c586ff813b7972dd967267cf5cc6d75..2d6fa55d179282021e3d3d90d59316f0cfddb359 100644 GIT binary patch delta 7618 zcmeHMd2AHd8J~Hx-g|d^U={*q*K1I4%)q>v**R>$95&%FCNVfPZBl1W5|zV+twhy^ zwbMeQG%bhK3{9!Z*;Gv%DJAvNq-moDnnHo3Y5PZ&R$yY|qC%jT5{Xvo+gb1Iu06Il zN-E_K*4O&&@B6*)d&l>_`MsXQ+^v@Xli@@Dn?T)Oc`i_KWneX%XtTdaz z598)F5pPaU5%53a?&gXdAl)Y6Z{d5E;NM>YdJgOh5X;HiX81KQJ04_Q0`WGnh46x7 zU@`tDJn1?V?h4%qeJSJ%nmCF5u&<*00jMqxbb7IR3}acZm*;5OP#{amEL12~5mbt% zWr@;sUgkMgG*p>0;aPB(M`~n+#zeyGJqM=Hi%O%A7=f1shL_CqZ;qzm5ygxd1zrd= zP0=zGDMd+$$O~1Z1Qq!~YrM{Ay4idN%q(N*MwZF?kQnWQGl7;+SRP6`%!N@v!Ieg# zLQaqnhmZ@SfPxww2Crxo@?EAF!N`OmX_UxtjKHW`Le#Ti04SM%|22rv^F}-1Yz+m5 z6BL#atr%QVW6r*zGN`a~x%8ia_zQH3_te{^eMn;dPNw+3X}h zp^@RTlTbIt0Y?G`(dmZ4CUTQtQ&chCLZB0`t;MF>>rtSg!%8q1PJ=2}j4?BtejL zpBXKjkhd>_dOV2I9wZt`K0BLm?p-ecZlCo9UEz2*z=0AETqWJ-~Ao}v}O+ExjQ)fhIj zD`-j9+U63SxRuPDfebHdXhn=0c0=K#Vs8Fe~eRBeHi8B&~j-;#jGk*rr^o4i8>mY@8SjWiu%{eSPNJCXnc|mQR z1W2>AtU*y@TWmL+*Qdl9Dmu#)t|J3Xjchlkl`Qf!N(~y9xPKB#ffad!W1x87BtTRK zuuzbovMvWS)0aTRJaGwhrE0L%SU4G86}k{ggxta2U`HSs5d2&H&At=fuX_Y{pS!*6 zvtXNduSx;`)^)1^peY5?h zZFxuQ(haS#4NI4`wZ`IhyIDI7=D54%?fTZF`MY5-!+g96pKf*ygKFi|%Pr1c!s68A zWR}x@v!CRx(i-in@J{PU z>N}F^W_ibsE@;19-CMsj8&GXFpd7|VtSau@ZqIaXzL<&O=5H983<=I);N8#j(yNd2pd8Qd5KXmRbJi7;=AGiX+K2=ffG{ z$;9M_O}WW5zjYl{r*~ZjA`b4B`a<5B=BXPXXg+@(+%z}62U^Y7Z-C?JAH4@Q;OYJW z@DgsagMcWZSX>2H$6`tr$8{W0PM=?r3MUQ0mL(8cuW1w_p_RC(0V?$}E> z9!ujrM4;S@%7HoI8{wa#Qs8(vE=Ds&;?R?OhF|&W;LA@lG{aIf`etGfJ)ek;ES)J! ztLC8HTm(JUQ!?~pVHLSbk5$m()-GU*d*}E@8kH@DzFSRztuQZqkC-uSJV5_p;??ME zPKT<@a5_aByg_j+D^jvS8GI@Jr%0NtXf*p}_*=UW`0T?nR^g6*46P z_ngc)|FwVj@XOB){`}dY{RfNPwT9ZEDS^AK85(}!$nd^BC7byz7p`FBKglZ?cCxDb z59IuEVh&#D00IRVrPTf>5L@QsOeoNcRlCn%z8k(LeRbYn zcpvoq%d^*WkNXVyo#4U1Kwzdn?e8G#!|8Bq==UKxcoQY*KKC6hI4>vP$xt6PL$!@2 zaD1}JYj&2H3^?A5y@{moHKT=FXKP!?%Squm`_-k{+xlKk3eVb4O$9~l5geh35~nd{I!)Fi4?r6sewG7m>)54we7y6-Qd7?;6Tqbe<- zy^!I)(im)+s?w6$3mMjx#$fAL6_(gu$k1LIgRKr%SaN$I!`jjqY{k05x8zcx*5)NHc55@cz-X71dty-7({sFZ^El1iRxdhgx6QXiV7 zD1B(FOTj{EDG8PiSZVEtg?htOXL$Bu5XMS_<3=O(%( zzE(n?l%S?6azW_AM+EI%%~5}1>i5tqt7FQN@{*F089p-AmfnSFH81T%`Mj{+G+SF8 zi;&3ls20&s}ViTAzat?-5}12$g<~Fx#(^V;Sk%72(>JcO|C{{nnTzYsSv|=%OX2> z>OmJB{9+H@f|6_EuIQ4Ev*ZQnleK3wOOw<;)ERXmE_+pa=NHKGxu4-A94Lr8Q8RVV zHxSmVlWQQX*C2aWc;J8TuBW=E0kWRZ?gqko+A{ZrjL$`#x>mGs z^4{NpcE2#buSzMQrcUBXbA~r??~`~)2uzX9y)SmH`!B)tQSrNMujx}G^etQWiErwb g=LWh*y-*JwKcbNlIu@n;_gV3d)|51M|1rw_1DYL!H2?qr 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;