203 messaggi dal 02 novembre 2010
Ciao a tutti,
dopo aver effettuato una query LINQ, nel momento in cui vado a processare i dati tramite foreach, ricevo un errore di conversione dei dati. Il codice è il seguente:



using (uno_rpEntities oitEntity = new uno_rpEntities())
            {
                MatriceQuery = from UNO_MMA_M in oitEntity.UNO_MMA_M
                               //join UNO_MMA_D in oitEntity.UNO_MMA_D on UNO_MMA_M.ID equals UNO_MMA_D.ID
                               where UNO_MMA_M.CSG_DOC == "FT"
                               select new Documento
                               {
                                   ID = UNO_MMA_M.ID,
                                   serie = UNO_MMA_M.NGB_SR_DOC,
                                   numero = UNO_MMA_M.NGL_DOC,
                                   contoCliFor = UNO_MMA_M.CKY_CNT_CLFR,
                                   dataCreazione = Convert.ToDateTime(UNO_MMA_M.DTT_DOC),
                                   magazzino = Convert.ToInt32(UNO_MMA_M.NKY_DEP.ToString())                                  
                               };




L'errore che ricevo è


System.NotSupportedException: 'LINQ to Entities non riconosce il metodo 'System.DateTime ToDateTime(System.Object)', che pertanto non può essere convertito in un'espressione di archivio.'


Questo si presenta per tutti i dati che non sono di tipo stringa. Non riesco minimamente a capire che diavolo voglia.

Avete qualche suggerimento?
Modificato da GANDULE il 23 luglio 2018 09.01 -
10.963 messaggi dal 09 febbraio 2002
Contributi
Ciao,
ogni cosa che si trova nella tua query LINQ deve poter essere tradotta in linguaggio SQL. Il provider LINQ ti sta dicendo che non riesce a tradurre l'invocazione al metodo Convert.ToDateTime in un equivalente SQL.

La soluzione consiste nel fare a meno delle funzioni di conversione nella tua query LINQ, e fare magari la conversione a posteriori, dopo che i risultati sono stati recuperati dal database. Ad esempio, il Convert.ToDateTime lo puoi fare in qualsiasi momento, ad esempio dal getter di una proprietà che restituisce DateTime a fronte della stringa ottenuta dal database.

In alternativa, puoi provare a vedere se uno dei metodi della classe SqlFunctions ti può aiutare.
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/language-reference/how-to-call-database-functions

Se possibile, cerca di evitare le conversioni: se devi trattare date, fai in modo che nel database vengano memorizzate come campi datetime anziché char o varchar.

ciao,
Moreno

Enjoy learning and just keep making
203 messaggi dal 02 novembre 2010
Ciao Moreno, per cui se ho capito bene una soluzione può essere (che è quella che poi ho adottato ieri come palliativo) gestire i dati restituiti come delle Stringhe.

Successivamente poi da codice fare ciò che mi pare con le varie conversioni dati. È corretto?

Certo mi pare comunque un po bizzarro che il framework non gestisca in automatico la conversione o comunque non me lo consenta tramite qualche metodo di cast. Mi pare un lavoro che si è fermato a metà.

Sbaglio?
10.963 messaggi dal 09 febbraio 2002
Contributi

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.