2012-03-04 2 views

risposta

1

Qualcosa di simile:

string monthName = dataContext.GetTable<TableName>() 
           .FirstOrDefault(t => t.DateTimeColumn) 
           .ToString("MMM");    
6

Beh, ci sono tre opzioni che posso immediatamente pensare:

  • Estrarre l'intero DateTime indietro, e quindi estrarre il mese e formattarla lato client
  • Utilizzare DateTime.Month per estrarre solo il mese dal database, quindi formattarlo lato client
  • Cercare di ottenere la formattazione (conv. ersion al testo) per lavorare sulla base di dati

Personalmente vorrei non provare la terza opzione - ci si sente a me come è molto improbabile che funzioni, almeno senza un grande sforzo.

ho il sospetto che avevo realtà basta tirare la DateTime indietro, e fare tutto ciò lato client. È molto facile farlo ed è destinato a funzionare. Prevedo che DateTime.Month sarà probabilmente lavoro, ma non si sta risparmiando molto molta larghezza di banda della rete, e si otterrà il server per fare il lavoro che è probabilmente altrettanto facile per il client da fare.

Si noti che se si desidera ancora i risultati come query, è possibile utilizzare AsEnumerable per forzare il resto della query da eseguire lato client. Per esempio:

var query = db.Customers 
       .Where(c => c.OrderCount > 500) // Or whatever query you want 
       .Select(c => new { c.Name, c.FirstOrder }) 
       .AsEnumerable() // Do the rest of the query on the client 
       .Select(c => new { c.Name, c.Month = c.FirstOrder.ToString("MMM") }); 

EDIT: Come notato nei commenti, ha senso utilizzare DateTime.Month sul lato server se sarà effettivamente influenzare i risultati , per esempio

var query = db.Customers.Where(c => c.FirstOrder.Month == 1) 
         ... 

... ma in quei casi mi aspetto che sia il valore numerico che è importante, non il nome del mese.

+0

La seconda opzione è buona se si desidera filtrare per mese, ma nella selezione la prima opzione va bene per +1 – rfcdejong

+1

@rfcdejong: Sì, buon punto - verrà modificato. –