将 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 中的特定小时舍入到实体

您是否尝试过在 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 对象

我希望这种方法对您有所帮助!

问候