如何将数字转换为DateTime以便在实体框架LINQ查询中进行比较?

时间:2019-02-14 11:41:44

标签: c# entity-framework tsql datetime entity-framework-6

我在数据库中有两个实体,它们以两种不同的格式保存DateTime; SuperLogs.EndTime是普通的DateTime,而SuperLogs.Logs将DateTime保留为Yearint),Month({{1} }),intDay)和intTime)。我想在查询中执行的操作是获得唯一的double实体,该实体的最新Log的DateTime大于SuperLogs的{​​{1}}。

我有一个C#函数(EndTime)将superLogX上的DateTime转换为实际的GetLogDateTime,但是当传递给以下查询时:“ System.InvalidOperationException:Internal .NET Framework Data Provider错误1025。”被抛出。

Logs

DateTime的实现方式如下:

var superLogNewerThanSuperLogX = await MyDbContext.SuperLogs.SingleOrDefaultAsync
(
    superLog => superLog.Logs.Max<Log, DateTime>(GetLogDateTime) > superLogX.EndTime
);

我的猜测是问题的一部分,就是GetLogDateTime仅转换为GetLogDateTime,但需要以某种方式转换为private static DateTime GetLogDateTime(Log log) { var time = log.Time; var hasTime = log.Time.HasValue; var hours = hasTime ? Math.Floor(time.Value / 10000) : 0; var minutes = hasTime ? Math.Floor(time.Value / 100) - hours * 100 : 0; return new DateTime ( log.Year, log.Month, log.Day, (int)hours, (int)minutes, hasTime ? (int)(time.Value - (hours * 10000 + minutes * 100)) : 0, hasTime ? (int)((time.Value - Math.Truncate(time.Value)) * 1000) : 0 ); } 。我不确定该怎么做,如果不可能的话,我还有一个数据库实现的标量函数,它执行与该方法相同的任务。

Func<Log, DateTime>

但是,这也没有什么特别的帮助,因为我似乎无法让Entity Framework允许我调用它!目前,我看到的唯一可行的选择是尝试将整个查询(比此处显示的要大得多)作为存储过程移入数据库。还有另一种方法,或者这是我将被迫要做的事情吗?

0 个答案:

没有答案