将 LINQ 中的特定小时舍入到实体
本文关键字:小时 舍入 实体 LINQ | 更新日期: 2023-09-27 18:33:07
我想知道如何将以下SQL代码转换为LINQ。
declare @t table( hour datetime )
insert into @t select '19000101 14:38:12' union select '19000101 09:21:55'
select
hour,
case
when DATEPART( MINUTE, hour ) >= 30
then LEFT(convert(varchar, dateadd( HOUR, 1, hour ) , 108),2)+':00:00'
else LEFT(convert(varchar, hour , 108),2)+':00:00'
end
from @t
我目前的查询是:
List<RegistroVehiculo> listaRegistroVehiculoCompleta =
(from r in db.RegistroVehiculo
where r.idPersona == oPersona.id
&& r.tipoRegistro == "S"
&& (
(oHoraExtraGeneral.fechaDesde <= r.fechaRegistro && r.fechaRegistro <= oHoraExtraGeneral.fechaHasta)
||
(oHoraExtraGeneral.fechaDesde <= r.fechaEntrada && r.fechaEntrada <= oHoraExtraGeneral.fechaHasta)
)
orderby r.fechaRegistro
select r).ToList<RegistroVehiculo>();
我怎样才能使四舍五入时间的列表起作用?
您是否尝试过在 LINQ 查询中使用 Let 子句?
看,它会是这样的:
var xx = (from r in li
let RoundHour = r.fechaRegistro.Minute >= 30 ?
TimeSpan.FromHours(r.fechaRegistro.Hour + 1) :
TimeSpan.FromHours(r.fechaRegistro.Hour)
where r.tipoRegistro == "S" //whatever else goes here Just for the sake of brevity
orderby r.fechaRegistro
select new { rounded = RoundHour,
registro = r}).ToList();
请注意,我们返回的不是 RegistroVehiculo 列表,而是匿名类型,因此,对于每次出现,您都会收到 2 件事:
- 四舍五入的小时
- RegistroVehiculo 对象
我希望这种方法对您有所帮助!
问候