Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

升级到 3.2.811 版本后,分组聚合语法解析异常,回退至 3.2.808 正常解析不报错 #1730

Closed
Roy-se7en opened this issue Feb 1, 2024 · 1 comment

Comments

@Roy-se7en
Copy link

问题描述及重现代码:

升级到 3.2.811 版本后,分组聚合语法解析异常,回退至 3.2.808 正常解析不报错

= await _orderRepository.Orm.Select<Order>().FromQuery(_orderRepository.Orm.Select<OrderView>(), _orderRepository.Orm.Select<MemberSettlementDto>().WithMemory(memberInfos))
                                .InnerJoin(t => t.t1.MemberId == t.t3.Id)
                                .LeftJoin(t => t.t1.Id == t.t2.Id)
                                .Where(t => t.t1.OrderStatusInt >= OrderStatusEnum.OrderToProduce.ToInt64() && t.t1.OrderStatusInt != OrderStatusEnum.OrderCanceled.ToInt64())
                                .Where(t => (t.t1.OrderAmount ?? 0) - (t.t1.PayAmount ?? 0) + (t.t1.RefundedAmount ?? 0) > 0)
                                .DisableGlobalFilter(ZhonTaiConsts.FilterNames.Member, ZhonTaiConsts.FilterNames.Tenant, XchainConsts.FilterNames.CopartnerOrg)
                                .GroupBy(t => t.t1.MemberId)
                                .ToListAsync(t => new
                                {
                                    MemberId = t.Key,
                                    NoSettleTime = t.Min(t.Value.Item2.NoSettleTime ?? DateTime.MaxValue),
                                    NoSettleAmount = t.Sum(t.Value.Item1.OrderAmount - (t.Value.Item1.PayAmount ?? 0) + (t.Value.Item1.RefundedAmount ?? 0)),
                                    NoSettleAmountOfOverdue = t.Sum((t.Value.Item2.NoSettleTime.HasValue && t.Value.Item3.CustomerNoSettleTime.HasValue && (t.Value.Item2.NoSettleTime.Value < t.Value.Item3.CustomerNoSettleTime.Value)) ? (t.Value.Item1.OrderAmount - (t.Value.Item1.PayAmount ?? 0) + (t.Value.Item1.RefundedAmount ?? 0)) : 0)
                                }
                                );

其中

NoSettleAmountOfOverdue = t.Sum((t.Value.Item2.NoSettleTime.HasValue && t.Value.Item3.CustomerNoSettleTime.HasValue && (t.Value.Item2.NoSettleTime.Value < t.Value.Item3.CustomerNoSettleTime.Value)) ? (t.Value.Item1.OrderAmount - (t.Value.Item1.PayAmount ?? 0) + (t.Value.Item1.RefundedAmount ?? 0)) : 0)

语法解析错误

System.ArgumentException: ExpressionTree 转换类型错误,值(True),类型(System.Boolean),目标类型(System.Nullable1[[System.DateTime, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]),Invalid cast from 'Boolean' to 'DateTime'. at FreeSql.Internal.Utils.GetDataReaderValue(Type type, Object value) at FreeSql.MySql.MySqlAdo.AddslashesProcessParam(Object param, Type mapType, ColumnInfo mapColumn) at FreeSql.Internal.CommonExpression.formatSql(Object obj, Type mapType, ColumnInfo mapColumn, List1 dbParams)
at FreeSql.Internal.CommonExpression.ExpressionBinary(String oper, Expression leftExp, Expression rightExp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionBinary(String oper, Expression leftExp, Expression rightExp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
at FreeSql.Internal.CommonExpression.ExpressionLambdaToSql(Expression exp, ExpTSC tsc)

数据库版本

Mysql 8.0.32

安装的Nuget包

3.2.811

.net framework/. net core

.NET7

@2881099
Copy link
Collaborator

2881099 commented Feb 1, 2024

#1727 这个问题呢,应该和这个有关

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants