2009-10-20 5 views
2

J'ai une table avec deux colonnes séparées pour la date et l'heure (SQL Server 2008).Récupère les données de la base de données entre la date et l'heure spécifiées à l'aide de linq-sql

Je suis en train d'obtenir les données entre 1 minute avant l'heure et 1 minute après l'heure actuelle dans mon asp.net application MVC (C#).

J'ai essayé d'utiliser la condition where comme:

ce.Start_Date.Add(ce.Start_Time) >= _currDateTime.AddMinutes(-1) && 
ce.Start_Date.Add(ce.Start_Time) <= _currDateTime.AddMinutes(1) 

Mais de ce qui précède où l'état, il jette une erreur:

The datepart millisecond is not supported by 
    date function dateadd for data type date. 

Comment puis-je corriger/corriger cette erreur?

Répondre

1

Converti à .AsEnumerable() et de manipuler la date et l'heure et le retour en .AsQueryable();

2

Ne pas ajouter les minutes dans la clause where, essayez quelque chose comme ceci:

for ce in data 
let start = _currDateTime.AddMinutes(-1) 
let end = _currDateTime.AddMinutes(1) 
where ce.Start_Date.Add(ce.Start_Time) >= start && 
ce.Start_Date.Add(ce.Start_Time) <= end 
select ce 

LINQ to SQL tente de traduire votre where clause dans T-SQL valide (en utilisant T-SQL's dateadd function) et il est avoir du mal à le faire.

+0

J'ai essayé la condition ci-dessus aussi, et son ne permettant pas d'ajouter ce.Start_Date.Add (ce.Start_Time) dans lequel l'état ou même en utilisant laisser – Prasad

0

Le moyen le plus simple d'ajouter le champ "heure de mise à jour" dans le tableau et de comparer l'heure actuelle avec ce champ.

1

Le problème semble être avec le serveur type DATE qui ne dispose pas d'une bonne traduction SQL.
Essayez de faire LINQ convertir date à DateTime, quelque chose comme ceci:

Convert.ToDateTime(ce.Start_Date).Add(ce.Start_Time)
Questions connexes