在编译的LINQ查询中作为条件部分,我使用了Datetime.Now。它曾经给我无关紧要的结果。我认为它用于为随后的几次调用存储相同的Datetime.Now值。为了解决这个问题,我将Datetime.Now作为一个值参数发送到编译后的查询中,并且工作正常。Datetime.Now缓存在.NET编译的LINQ查询中
旧代码
event.EventEnd >= Datetime.Now
新代码
event.EventEnd >= currentTime
凡currentTime的是一个变量包含编译的查询之外接收Datetime.Now值。
请让我知道这是符合LINQ查询的默认行为或我错了地方
平台:ASP.NET 4.0,MVC 2.0
不相关的结果的手段,说我们有一个记录eVent.EventEnd值是10-10-10 02:10 PM,如果我在10-10-10 02:00 PM运行查询,我们会在结果中获得该记录。如果我在10-10-10 03:00 PM运行查询,我们也会得到结果中的记录。这是错误的。但是,我在DateTime.Now上使用该变量后,它工作正常。
编译LINQ查询
在LINQ2SQLpublic static Func<DataContext, CommonParams, string, DateTime, IQueryable<EventEntity>> GetEventsByOwnerID
= CompiledQuery.Compile(
(DataContext context, CommonParams inputParams, string eventType, DateTime currentTime) =>
(from eVent in context.Events
join categories in context.Categories on eVent.CategoryID equals categories.CategoryID
where !eVent.IsDeleted
&& eVent.OwnerID == inputParams.UserID
&& (eventType == "ALL" ||
(eventType == "CURRENT" && eVent.EventEnd >= currentTime) ||
(eventType == "OLD" && eVent.EventEnd < currentTime))
orderby eVent.PostedOn descending
select new EventEntity()
{
EventID = eVent.EventID,
CategoryID = eVent.CategoryID,
Title = eVent.Title,
Owner = eVent.OwnerName,
EventStart = eVent.EventStart,
EventEnd = eVent.EventEnd,
Host = eVent.Host,
Location = eVent.Location,
Description = eVent.Description,
Email = eVent.Email,
URL = eVent.URL,
Phone = eVent.Phone,
CategoryName = categories.CategoryName,
ProgramName = eVent.ProgramName,
IsTelevised = eVent.IsTelevised,
ChannelName = eVent.ChannelName,
CityID = eVent.CityID,
CountryID = eVent.CountryID,
IsActive = eVent.IsActive,
OwnerID = eVent.OwnerID,
IsEndTimePartEmpty = eVent.IsEndTimePartEmpty,
IsStartTimePartEmpty = eVent.IsStartTimePartEmpty,
IsDeleted = eVent.IsDeleted,
ThumbnailURL = eVent.ThumbnailURL,
AttendeeCount = eVent.AttendeeCount,
CommentsCount = eVent.CommentsCount
})
);
你是什么意思的无关结果?你能发布整个查询吗?我想我们需要更多的信息。 – 2010-11-08 09:37:27
这是一个数据库查询吗?它会使用数据库服务器的日期和时间吗?时钟是否同步? – Rup 2010-11-08 09:47:03
@RUP,是的,数据库服务器的时间是正确的。 – 2010-11-08 09:56:05