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

SqlSugar 处理完成
1 151

我查询出的语句想要按时间的日期分组,因为库里的时间格式为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

  • 我找到问题原因了, 因为没有加这句话: .MergeTable() , 开始不明白这句话的含义,现在忽然懂了, 这样生成的临时表就有自己指定的字段,可以进行分组了.


    0 回复