Linq to sql 现在缓存在.NET编译的LINQ查询中

Linq to sql 现在缓存在.NET编译的LINQ查询中,linq-to-sql,asp.net-mvc-2,Linq To Sql,Asp.net Mvc 2,在编译后的LINQ查询中作为条件部分,我使用了Datetime.Now。它过去常常给我不相关的结果。我认为它过去存储相同的Datetime。现在,它的值对于以后的几个调用都是一样的。为了解决这个问题,我将Datetime.Now作为一个值参数发送到已编译的查询,它工作正常 旧代码 event.EventEnd >= Datetime.Now event.EventEnd >= currentTime 新代码 event.EventEnd >=

在编译后的LINQ查询中作为条件部分,我使用了Datetime.Now。它过去常常给我不相关的结果。我认为它过去存储相同的Datetime。现在,它的值对于以后的几个调用都是一样的。为了解决这个问题,我将Datetime.Now作为一个值参数发送到已编译的查询,它工作正常

旧代码

     event.EventEnd >= Datetime.Now
     event.EventEnd >= currentTime
新代码

     event.EventEnd >= Datetime.Now
     event.EventEnd >= currentTime
其中currentTime是一个变量,包含Datetime.Now值,该值从编译查询外部接收

请告诉我这是LINQ查询的默认行为还是我在某个地方错了

平台:ASP.NET4.0、MVC2.0

无关结果意味着,假设我们有一条记录带有eVent.EventEnd值是10-10-10 02:10 PM,如果我在10-10-10 02:00 PM运行查询,我们将在结果中得到该记录。如果我在晚上10-10-10 03:00运行查询,我们也会在结果中得到该记录。这是错误的。但是当我在DateTime上使用变量后,现在,它工作得很好

编译LINQ查询

public 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
    })
);
公共静态函数GetEventsByOwnerID
=CompiledQuery.Compile(
(DataContext上下文,CommonParams inputParams,string eventType,DateTime currentTime)=>
(来自上下文中的事件。事件
在上下文中连接类别。eVent.CategoryID上的类别等于categories.CategoryID
哪里!eVent.IsDeleted
&&eVent.OwnerID==inputParams.UserID
&&(eventType==“全部”||
(eventType==“当前”&&eVent.EventEnd>=当前时间)||
(eventType==“旧”和&eVent.EventEnd
Datetime.Now在您的Linq2Sql中被转换为sql查询中的GetDate()。您的currentTime值在生成的sql查询中转换为静态日期,如Where toto>'2010-10-10 03:00:00'


因此,您的软件和DB服务器之间似乎没有同步区域设置或时钟。可能是某个地方的GMT-1或GMT+1。

我也看到了同样的问题。我使用SQL Profiler验证了它是否缓存了
DateTime的值。现在

不相关的结果是什么意思?你能发布整个查询吗?我想我们需要更多的信息。这是数据库查询吗?它会使用数据库服务器的日期和时间吗?时钟是否同步?@RUP,是的,DB服务器时间正确。我验证了所有服务器的时间。这是一样的,所以这是一个缓存问题。谢谢你,埃迪