Я пишу парсер журналов для веб-приложения asp.net mvc2.Я использую Entity Framework в качестве модели, и ведение журнала выполняется как с использованием моего ручного движка, так и с помощью функции CDC SqlServer2008.
При вставке или редактировании строки в базе данных действие регистрируется.Однако существует небольшая задержка между происходящими изменениями в реальной таблице и регистрацией этих изменений.Мне нужно отображать детали из таблиц 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;
}
Я знаю, что мог бы вручную сделать предложение "где", но оно было бы большим, уродливым и медленным.У кого-нибудь есть лучшие предложения?