lambda 查询表达式中 DateOnly 转 DateTime 的 Bug 返回

SqlSugar 沟通中
2 209

表字段 Time 的类型为 DateTime

查询参数date 的类型为 DateOnly?

var list = await sugarScope.QueryableWithAttr<EmployeeConsumeRecord>()
	.Includes(i => i.Employee)
	.Where(i => i.VerifierId == LoginId && i.VerifyPointId == verifierinfo.PointId)
	.WhereIF(date.HasValue, i => i.Time >= date!.Value.ToDateTime(TimeOnly.MinValue) && i.Time <= date!.Value.ToDateTime(TimeOnly.MaxValue))
	//.WhereIF(date.HasValue, i => SqlFunc.Between(i.Time, date!.Value.ToDateTime(TimeOnly.MinValue), date!.Value.ToDateTime(TimeOnly.MaxValue)))
	.WhereIF(!date.HasValue, i => i.Time >= DateTime.Today && i.Time < DateTime.Today.AddDays(1))
	.ToListAsync();

生成SQL:

sql:SELECT `Id`,`EmployeeId`,`VerifyPointId`,`Amount`,`VerifierId`,`Time`,`Remark`,`Status`,`RecordId`,`IsDeleted`,`CreateTime`,`ModifyTime`,`Ver` FROM `EmployeeConsumeRecord`  WHERE (( `VerifierId` = @VerifierId0 ) AND ( `VerifyPointId` = @VerifyPointId1 ))  AND (( `Time` >= CAST(@MethodConst2 AS DATETIME)) AND ( `Time` <= CAST(@MethodConst4 AS DATETIME)))  AND ( `IsDeleted` = @IsDeleted6 )
params:
@VerifierId0:1867935166433988608
@VerifyPointId1:3
@MethodConst2:2025/1/9 0:00:00
@MethodConst3:00:00:00
@MethodConst4:2025/1/9 0:00:00
@MethodConst5:23:59:59.9999999
@IsDeleted6:0

正确的应该是:

@MethodConst2:2025/1/9 00:00:00
@MethodConst4:2025/1/9 23:59:59.9999999


热忱回答2

  • date!.Value.ToDateTime(TimeOnly.MinValue)


    从外面处理好在传进来

    0 回复
  • todatetime会走SQL函数

    0 回复