DateOnly 类型bug 返回
SqlSugar
沟通中
4
434
老菜鸟了 发布于2025/11/13
悬赏:0 飞吻
/// <summary>
/// 报价表
/// </summary>
public class Quotation : BaseEntity
{
/// <summary>
/// 业务外主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 供应商Id
/// </summary>
[SugarColumn(IsOnlyIgnoreUpdate = true)]
public long SupplierId { get; set; }
/// <summary>
/// 货品Id
/// </summary>
[SugarColumn(IsOnlyIgnoreUpdate = true)]
public long GoodsId { get; set; }
/// <summary>
/// 生效日期
/// </summary>
public DateOnly TermStart { get; set; }
/// <summary>
/// 截止日期
/// </summary>
public DateOnly TermEnd { get; set; }
/// <summary>
/// 状态
/// </summary>
public QuotationStatus Status { get; set; }
}
IEnumerable<Quotation> list = ...
var query = sugarScope.Reportable(list.ToList()).ToQueryable();
var overlist = await sugarScope.Queryable<Quotation>()
.InnerJoin(query, (l, r) => l.SupplierId == r.SupplierId && l.GoodsId == r.GoodsId && l.TermStart <= r.TermEnd && l.TermEnd >= r.TermStart && l.Status == QuotationStatus.启用 && l.Id != r.Id)
.ToListAsync();连表查询时生成的sql:
SELECT `l`.`Id`,`l`.`SupplierId`,`l`.`GoodsId`,`l`.`TermStart`,`l`.`TermEnd`,`l`.`Status`,`l`.`IsDeleted` FROM `Quotation` `l` Inner JOIN ( SELECT 1979003253374980096 AS `Id` , 1831509754221039616 AS `SupplierId` , 1830908054225424384 AS `GoodsId` , CAST(N'11/09/2025' AS DATETIME) AS `TermStart` , CAST(N'11/30/2025' AS DATETIME) AS `TermEnd` ,null as NoCacheColumn UNION ALL SELECT 1985188292718628864 AS `Id` , 1831509754221039616 AS `SupplierId` , 1927917954545094656 AS `GoodsId` , CAST(N'11/09/2025' AS DATETIME) AS `TermStart` , CAST(N'11/30/2025' AS DATETIME) AS `TermEnd` ,null as NoCacheColumn ) `r` ON (((((( `l`.`SupplierId` = `r`.`SupplierId` ) AND ( `l`.`GoodsId` = `r`.`GoodsId` )) AND ( `l`.`TermStart` <= `r`.`TermEnd` )) AND ( `l`.`TermEnd` >= `r`.`TermStart` )) AND ( `l`.`Status` = @Status0 )) AND ( `l`.`Id` <> `r`.`Id` )) WHERE( `l`.`IsDeleted` = @IsDeleted101 )
DateOnly 类型 变成了
CAST(N'11/09/2025' AS DATETIME) AS `TermStart`
导致 查询为空
如果改为这种写法 就能查询到数据
CAST(N'2025/11/09' AS DATETIME) AS `TermStart`
原因好像是日期格式问题
为什么生成sql 的时候 DateOnly 会 按 “月/日/年”来生成,有什么办法能变为 年/月/日
或者 有什么设置让mysql 正确比较 不同格式的日期数据
热忱回答(4)
-
fate sta VIP0
2025/11/14我处理一下,报表查询dateonly
0 回复 -
老菜鸟了 VIP0
2025/11/14@fate sta:有应急方法吗
0 回复 -
老菜鸟了 VIP0
2025/11/14@老菜鸟了:用原生sql 模拟 Reportable 应急了
var sql = new StringBuilder("select l.Id from Quotation l inner join ("); bool isFirst = true; foreach (var item in list) { if (!isFirst) { sql.Append(" union all "); } sql.Append($"select {item.SupplierId} as SupplierId,{item.GoodsId} as GoodsId,'{item.TermStart:yyyy/MM/dd}' as TermStart,'{item.TermEnd:yyyy/MM/dd}' as TermEnd"); if (hasID) sql.Append($",{item.Id} as Id"); isFirst = false; } sql.Append(") r on l.SupplierId=r.SupplierId and l.GoodsId=r.GoodsId and l.TermStart <= r.TermEnd and l.TermEnd >= r.TermStart"); if (hasID) sql.Append(" and l.Id != r.Id"); sql.Append(" where l.Status = 0"); var overlist = await sugarScope.SqlQueryable<ViewQuotationId>(sql.toString()).ToListAsync();0 回复 -
fate stay night VIP0
2025/11/14SqlSugarCore 5.1.4.208-preview25
过五分钟后,安装到预览版本。
0 回复