我正在为一个asp.net mvc2 web应用程序编写日志解析器。我使用Entity框架作为模型,同时使用我的手动引擎和SqlServer2008 CDC功能进行日志记录。
当向数据库插入或编辑行时,会记录下操作。但是,在实际表中发生更改和记录这些更改之间存在一小段时间差。当用户单击其中某些内容时,我需要显示CDC表中的详细信息。由于前面提到的时间差,我无法比较两个DateTime值的等价性。我想允许2000毫秒的延迟。我所知道的最简单的方法是使用Ticks或TimeOfDay,并比较它们的值相减的绝对值,但该死的Linq-To-Entities不允许使用这两个属性。
以下是我遇到问题的简单函数...
当向数据库插入或编辑行时,会记录下操作。但是,在实际表中发生更改和记录这些更改之间存在一小段时间差。当用户单击其中某些内容时,我需要显示CDC表中的详细信息。由于前面提到的时间差,我无法比较两个DateTime值的等价性。我想允许2000毫秒的延迟。我所知道的最简单的方法是使用Ticks或TimeOfDay,并比较它们的值相减的绝对值,但该死的Linq-To-Entities不允许使用这两个属性。
以下是我遇到问题的简单函数...
public static List<dbo_Object_CT> GetLogDetails (Int32 objectID, DateTime? actionDateAndTime)
{
ObjectEntities oe = new ObjectEntities();
var mylogdetails = (from objectLog in oe.dbo_Object_CT
join ltm in oe.lsn_time_mapping on objectLog.C___start_lsn equals ltm.start_lsn
where (objectLog.Id == objectID)
&& ((actionDateAndTime == null) ? true : (Math.Abs(actionDateAndTime.Value.Ticks - ltm.tran_begin_time.Value.Ticks) < 2000))
select objectLog).ToList();
return mylogdetails;
}
我知道我可以手动编写“where”子句,但那会很冗长、难看且慢。有没有更好的建议?