A l'intérieur d'une requête LINQ compilée en tant que partie de condition, j'utilisais Datetime.Now. J'avais l'habitude de me donner des résultats non pertinents. Je pense qu'il a utilisé pour stocker la même valeur Datetime.Now pour quelques appels ultérieurs. Pour résoudre ce problème, j'envoie Datetime.Now en tant que paramètre de valeur à la requête compilée et cela fonctionne correctement.Datetime.Now mis en cache dans une requête LINQ compilée .NET
Ancien code
event.EventEnd >= Datetime.Now
Nouveau Code
event.EventEnd >= currentTime
Où currentTime est une variable contient une valeur Datetime.Now reçue en dehors de la requête compilée.
S'il vous plaît laissez-moi savoir si cela est le comportement par défaut de requête LINQ satisfait ou je me suis trompé quelque part
Plate-forme: ASP.NET 4.0, MVC 2.0
moyen de résultats non pertinents, disons que nous avons un enregistrement avec La valeur eVent.EventEnd est 10-10-10 02:10 PM, si je cours la requête à 10-10-10 02:00 PM, nous obtenons cet enregistrement dans le résultat. Si je cours la requête à 10-10-10 03:00 PM aussi nous obtenons cet enregistrement dans le résultat. Ce qui est faux. Mais après avoir utilisé la variable à la place sur DateTime.Now, cela fonctionne très bien.
Compilé requête 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
})
);
Qu'entendez-vous par résultats non pertinents? Pouvez-vous publier l'intégralité de la requête? Je pense que nous avons besoin de plus d'informations ici. –
S'agit-il d'une requête de base de données? Aurait-il utilisé la date et l'heure du serveur de base de données? Les horloges sont-elles synchronisées? – Rup
@RUP, Oui, l'heure du serveur DB est correcte. –