2009-11-04 3 views
3

Comment transmettre la valeur Date Time ici?ObjectQuery, en passant datetime dans le filtre de la clause Where

ObjectQuery<Item> _Query = ItemEntities.CreateQuery<Item>("Item"); 
_Query = _Query.Where("(it.StartDate >= 11/4/2009 5:06:08 PM)"); 

mon exemple de code ci-dessus semble fonctionner.

même avec ce

ObjectQuery<Item> _Query = ItemEntities.CreateQuery<Item>("Item"); 
_Query = _Query.Where("(it.StartDate >= \"11/4/2009 5:06:08 PM\")"); 

Je suis erreur de casting de type EDM.

Répondre

4

Ce qui suit devrait fonctionner:

ObjectQuery<Item> _Query = ItemEntities.CreateQuery<Item>("Item"); 
_Query = _Query.Where("(it.StartDate >= DATETIME'11/4/2009 17:06:08')"); 

Voir la documentation pour plus d'informations sur les littéraux dans les requêtes ESQL.

+0

ne fonctionne toujours pas, qui me donne cette erreur « Les types d'argument « Edm.DateTime » et « Edm.String » sont incompatibles pour cette opération, près de là où prédicat, ligne 6, colonne. 15. " – Juvil

+0

@Juvil: J'ai mis à jour l'extrait de code pour inclure le qualificateur DATETIME qui est nécessaire pour distinguer les littéraux de date/heure des littéraux de chaîne. – pmarflee

+0

merci, je vois que c'est ce qui manque. – Juvil

5

Malheureusement pour moi, la réponse de @ pmarflee ne fonctionne pas. J'ai trouvé une autre solution correspondant à MSDN:

La partie date doit avoir le format: AAAA-MM-JJ, où AAAA est quatre valeur de l'année chiffres entre 0001 et 9999, MM est le mois et DD est la valeur du jour qui est valide pour le mois MM donné.

La partie du temps doit avoir le format: HH: MM [: SS [.fffffff]], où HH est la valeur de l'heure entre 0 et 23, MM est la valeur de minutes entre 0 et 59, SS est la seconde valeur entre 0 et 59 et fffffff est la seconde valeur fractionnaire entre 0 et 9999999. Toutes les plages de valeurs sont inclusivement. Les secondes fractionnées sont facultatives. Les secondes sont facultatives sauf si des secondes fractionnaires sont spécifiées; dans ce cas, les secondes sont requises. Lorsque les secondes ou les secondes fractionnaires ne sont pas spécifiées, la valeur par défaut sera utilisée à la place.

Il peut y avoir un nombre quelconque d'espaces entre le symbole DATETIME et la charge utile littérale , mais pas de nouvelles lignes.

DATETIME'2006-10-1 23h11'
DATETIME'2006-12-25 01: 01: 00,0000000' - même que DATETIME'2006-12-25 1h01'

et

code lui-même:

DateTime dateTimeValue = DateTime.Now; 
// ESQL DATETIME format MUST be <yyyy-MM-dd HH:mm> format         
_Query = _Query.Where(string.Format("(it.StartDate >= DATETIME'{0:yyyy-MM-dd HH:mm}')",dateTimeValue); 
+0

@Anatolli Pouvez-vous s'il vous plaît m'aider avec cela http://stackoverflow.com/questions/22247016/edm-datetime-coversion-javascript –