linq 刻度必须介于0和TimeOnly.MaxValue.刻度之间

gijlo24d  于 2022-12-30  发布在  其他
关注(0)|答案(2)|浏览(146)

我使用的是.net core 6,它支持DateOnly和TimeOnly数据类型。现在,我遇到的问题是我从表(table1)中选择了可为空的TimeOnly列(TimeEnd),这会导致异常:刻度必须介于0和TimeOnly.MaxValue.Ticks之间。(参数“ticks”)

var result = await (from s in _unitOfWork.Context.table1
               select new
            {
                Id = Convert.ToString(s.EventId),
                EndTimeC = s.TimeEnd,
                DateC = s.Date,
                StartTimeC = s.TimeBegin,
                Systemmodstamp = s.ModifiedDate}).ToListAsync();
djp7away

djp7away1#

你可以这样试试:

public class Result
{
  public string Id {get;set;}
  public TimeOnly? EndTimeC {get;set;}
  public DateOnly? DateC {get;set;}
  public TimeOnly? StartTimeC {get;set;}
  public DateOnly? Systemmodstamp {get;set;}
}

然后将您的响应转换为允许空值的新创建对象:

var result = await (from s in _unitOfWork.Context.table1
               select new Result
            {
                Id = Convert.ToString(s.EventId),
                EndTimeC = s.TimeEnd,
                DateC = s.Date,
                StartTimeC = s.TimeBegin,
                Systemmodstamp = s.ModifiedDate}).ToListAsync();
             };
smdnsysy

smdnsysy2#

您应该添加代码EndTimeC = s.TimeEnd.HasValue ? s.TimeEnd.Value : default(TimeOnly)来检查TimeOnly是否为null,并根据它来处理它。
可替换的方式是EndTimeC = s.TimeEnd.GetValueOrDefault()

相关问题