SqlServer使用Queryable查询后,GroupBy分组,生成的Sql语句错误:列名无效 返回
SqlSugar
处理完成
1
477

悬赏:0 飞吻
我查询出的语句想要按时间的日期分组,因为库里的时间格式为yyyy-MM-dd HH:mm:ss,所以需要转换一下
var resList = await db.Queryable<BllmodOrder>() .Where(it => it.AddDate.ToString("yyyy-MM") == SelectedDate.ToString("yyyy-MM") && strings.Contains(it.Status) && it.PrintStatus == "已打印" && it.ErrMsg.Contains("完成")) .Select(it=>new { nWlNumber = it.WlNumber, nIp = it.Ip, nAddDate = it.AddDate.Date }) .GroupBy(it=>new{it.nWlNumber,it.nIp,it.nAddDate}) .ToListAsync();
我参照文档写的上面的查询,但是运行时报了
Microsoft.Data.SqlClient.SqlException:“列名 'nWlNumber' 无效。 列名 'nIp' 无效。 列名 'nAddDate' 无效。”
分析是这句GroupBy报错了.
下面是Aop打印:
执行前 [Sql]: SELECT [WL_NUMBER] AS [nWlNumber] , [Ip] AS [nIp] , CAST([AddDate] AS DATE) AS [nAddDate] FROM [BllMod_Order] WHERE ((((CONVERT(varchar(7),convert(datetime,[AddDate]), 23) =CONVERT(varchar(7),convert(datetime,@MethodConst1), 23)) AND ([Status] IN ('单据完成','追加物流子单完成')) ) AND ( [PrintStatus] = @PrintStatus4 )) AND ([ErrMsg] like '%'+@MethodConst5+'%') ) GROUP BY [nWlNumber],[nIp],[nAddDate] [Pars]: [Name]:@MethodConst0 [Value]:yyyy-MM [Type]:String [Name]:@MethodConst1 [Value]:2023/12/2 0:00:00 [Type]:DateTime [Name]:@MethodConst2 [Value]:yyyy-MM [Type]:String [Name]:@PrintStatus4 [Value]:已打印 [Type]:String [Name]:@MethodConst5 [Value]:完成 [Type]:String
执行错误语句: SELECT [WL_NUMBER] AS [nWlNumber] , [Ip] AS [nIp] , CAST([AddDate] AS DATE) AS [nAddDate] FROM [BllMod_Order] WHERE ((((CONVERT(varchar(7),convert(datetime,[AddDate]), 23) =CONVERT(varchar(7),convert(datetime,@MethodConst1), 23)) AND ([Status] IN ('单据完成','追加物流子单完成')) ) AND ( [PrintStatus] = @PrintStatus4 )) AND ([ErrMsg] like '%'+@MethodConst5+'%') ) GROUP BY [nWlNumber],[nIp],[nAddDate] 错误原因: 列名 'nWlNumber' 无效。 列名 'nIp' 无效。 列名 'nAddDate' 无效。
我按照执行前生成的Sql语句输入到SqlServer中,手动输入GroupBy条件时,会自动的把nWlNumber,nIp,nAddDate转换成 [WL_NUMBER],[Ip],CAST([AddDate] AS DATE),所以不出错.
但是直接生成的语句不会自动转换.会报列名无效的错误.不知道这个错误是不是预期的.
还是因为我没有理解对,用错了方法.
热忱回答(1)
-
混世魔羊 VIP0
2023/12/2我找到问题原因了, 因为没有加这句话: .MergeTable() , 开始不明白这句话的含义,现在忽然懂了, 这样生成的临时表就有自己指定的字段,可以进行分组了.
0 回复