2009-11-20 20 views
5

Sto cercando di ottenere una stringa di data formattata direttamente da un'espressione di query LINQ-to-Entities.Linq-to-Entities: Formato Data in espressione di query select

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.MonthValue + "/" + ac.DayOfMonth + "/" + ac.FullYear).ToList(); 

Ma, ottengo il messaggio di errore folloinw: "Impossibile eseguire il cast del tipo 'System.Nullable`1' digitare 'System.Object' LINQ to Entities supporta solo colata di modello Entity Data tipi primitivi.. "

C'è un modo per farlo oltre a scorrere il set di risultati? Grazie! Abe

risposta

9

ho trovato una soluzione:

nonBusinessDays = (from dt in 
          (from ac in db.AdminCalendar 
          where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
          select ac.DateTimeValue).ToList() 
        select string.Format("{0:M/d/yyyy}", dt)).ToList(); 
+1

Il problema che stai avendo è che il suo tentativo di tradurre ToString in SQL valida per l'esecuzione sul server - e che quindi non riesce a fare. Le query nidificate significano che stai separando la .ToString che non può essere eseguita dalla query che può e quindi funziona – Murph

+1

Grazie! Ha senso ora; LINQ sta cercando di associare la funzione a una funzione SQL, che non esiste. Per risolvere il problema, dovevo prima ottenere i dati in un elenco ed elaborare l'elenco da lì. – Abe

+0

Il colpevole è il carico pigro. –

0

Provare a cambiare la vostra selezione da utilizzare ToString:

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.DateTimeValue.ToString("MM/dd/yyyy")).ToList(); 
+0

Sfortunatamente, non è possibile eseguire il metodo ToString; ecco l'eccezione che ho ottenuto: LINQ to Entities non riconosce il metodo metodo "System.String ToString (System.String)" e questo metodo non può essere tradotto in un'espressione di archivio. – Abe