2009-10-25 6 views
2

J'ai cette requête LINQ. La date est stockée sous la forme d'une chaîne dans la base de données, mais j'ai besoin de la commander. Donc, je le convertis en DateTime, mais il ne commande pas.LINK-To-SQL OrderBy avec DateTime ne fonctionne pas

(from m in dbDataContext.TimeCards 
    where m.TIMECARDDATE != "" 
    && m.TIMECARDDATE != null 
    orderby Convert.ToDateTime(m.TIMECARDDATE) descending 
    select Convert.ToDateTime(m.TIMECARDDATE)).Distinct().ToList(); 

Une idée de pourquoi cela ne fonctionne pas? Je ne peux pas changer la base de données, donc je dois traiter les données comme elles sont. Je récupérer les données commandées comme ça ...

2/27/2009 
2/26/2009 
2/25/2009 
2/28/2009 
2/24/2009 
+0

d'abord vous pouvez utiliser String.IsNullOrEmpty – Letterman

+0

c'est la même que l'utilisation de « ». –

Répondre

7

Essayez d'évaluer l'expression sans tri, puis appliquer le tri des résultats de Distinct:

(Linq-To-Sql-Expression).Distinct().OrderByDescending(x => x.TIMECARDDATE).ToList() 
+0

Merci. C'est ce qu'il a fait. –

+1

pouvez-vous l'expliquer? – Letterman

+1

Distinct() ne garantit pas qu'il maintiendra l'ordre des éléments qui y sont entrés, mais seulement qu'il retournera un ensemble de résultats distinct. Ainsi, bien que l'entrée de Distinct() ait été triée correctement à l'origine, sa sortie ne l'était pas. –

1

D'abord, vous pouvez utiliser string.IsNullOrEmpty(), au lieu de vérifier si la chaîne est nulle ou ""

A côté, cela devrait fonctionner. Vous le réorganisez probablement en dehors de ce code.

Faites attention à ce n'est pas exécuté jusqu'à ce que vous l'ayez foreach (appelez GetEnumerator()). Donc, si vous changez quelque chose avant de l'itérer .. ce pourrait être la raison.

p.s. est-ce que TIMECARDDATE est un objet ou une chaîne?

+0

Il est effectivement exécuté lorsque cette ligne est exécutée car j'utilise le .ToList() qui l'amène à être évalué à ce moment-là. TIMECARDDATE est une chaîne (malheureusement) –

+0

aussi, string.IsNullOrEmpty n'est pas supporté dans LINQ-To-SQL –

+0

je n'ai pas remarqué la ToList, et il n'y a rien à voir avec LINQ to SQL .... vous pouvez utilisez string.IsNullOrEmpty sur n'importe quelle chaîne. – Letterman

Questions connexes