2010-07-21 4 views
2

J'ai une table de base de données qui contient des informations pour les fichiers reçus. L'une des colonnes est un DateTime qui spécifie quand le fichier a été reçu. Je dois obtenir une liste distincte de mois avec l'année (MM/AAAA) pour les fichiers reçus. Je dois le sortir de cette table. Il peut y avoir des milliers d'enregistrements dans cette table de sorte que la façon dont je l'ai fait, dans Oracle, est dans ma déclaration select, je formate le datetime en MM/YYYY et fais un sort desc avec une clause distincte dessus. Cela me donne une liste des mois où un fichier a été reçu. Très rapide et efficace.Format DateTime dans une requête EF

Maintenant, je dois le faire en utilisant EFv4 .... voici la requête que j'ai utilisée dans Oracle. Quelqu'un sait comment je peux le traduire en utilisant l'un des moyens d'interrogation EF?

select distinct 
    to_char(i.date_received, 'MMYYYY')) MonthAndYear 
    from table1 
    order by MonthAndYear desc 

Répondre

2

Eh bien, ne le faites pas comme Oracle. Faites comme LINQ.

var q = (from i in Context.Table1 
     select new 
     { 
      Month = i.date_received.Month, 
      Year = i.date_received.Year 
     }).Distinct(); 

Pour obtenir un DateTime sur:

var r = q.AsEnumerable().Select(d => new DateTime(d.Year, d.Month, 1)); 
+0

Vous savez ... J'étais une ligne loin d'obtenir cela. Votre solution me fournit la liste correcte, mais existe-t-il un moyen d'obtenir une liste d'objets DateTime au lieu de deux variables distinctes? Peut-être que je vais simplement faire une boucle dans la liste et créer mes objets DateTime à partir des variables mois et année ... –

+0

Comment créer un 'DateTime' sans un jour? –

+0

Je ne me soucie pas du jour, donc il serait mis à 1. Je suppose que mon but est de renvoyer une collection d'objets DateTime au lieu de deux ints. –