giovedì 5 luglio 2018

entity framework problem cast string to int ExecuteStoreQuery The specified cast from a materialized 'System.Double' type to the 'System.String' type is not valid.

Nel caso che stiamo utilizzando il metodo ExecuteStoreQuery in Entity Framework per estrapolare da una query dei record, può capitare che da una select il dato di tipo intero convertito in testo generi l'eccezione
"The specified cast from a materialized 'System.Double' type to the 'System.String' type is not valid."

Qui di seguito l'istruzione che potrebbe causare l'errore, se il campo è numerico.

var res = objectContext.ExecuteStoreQuery<string>("select distinct ColonnaInteger from " + tabella + " where ColonnaInteger  like '%" + filter.Replace("'", "''") + "%'");

Per evitare questa eccezione, dobbiamo utilizzare l'istruzione convert che converte il tipo intero in testo, in modo che poi nel metodo "ExecuteStoreQuery" non viene generato nessun errore.

Qui di seguito il frammento di codice per evitare l'eccezione.

var res = objectContext.ExecuteStoreQuery<string>("select distinct CONVERT(varchar(10), ColonnaInteger) from " + tabella + " where ColonnaInteger like '%" + filter.Replace("'", "''") + "%'");



Nessun commento: