Méthode de conversion. “La méthode spécifiée sur le type ne peut pas être traduite en une expression de magasin LINQ to Entities”

J’avais migré mon projet d’entité 6.0 de SQL Server vers PostGreSQL. Avec SQL Server, ce type de conversion de mes requêtes fonctionnait correctement.

Module.cs

return ( from m in objDB.Modules orderby m.ID select new { ID = m.ID, Name = m.Name, Status = DB_Function.Convert.ToInt32( m.Status ) } ); 

PS: le statut est un type booléen

DB_Function.cs

 [System.Data.Entity.DbFunctionAtsortingbute( "Business.Database", "ToInt32" )] public static Int32 ToInt32( Boolean Val ) { return System.Convert.ToInt32( Val ); } 

Cependant, lorsque j’ai migré vers PostgreSQL (et donc modifié mon EDMX), ce type de conversion ne s’exécute plus:

La méthode spécifiée ‘Int32 ToInt32 (Boolean)’ sur le type ‘DB_Function + Convert’ ne peut pas être traduite en une expression de magasin LINQ to Entities.

Cette erreur est liée à PostGre (comme int4 et non int32) ou il me manque quelque chose?

Merci d’avance.

Pour comprendre le type de fonctions utilisables dans LINQ to Enitities: voir ci-dessous linK: linq to entity ne reconnaît pas une méthode.

Maintenant, dans ce cas particulier, nous avions une fonction du côté LINQ to Entites, qui ne pouvait pas être traduite en requête SQL et par conséquent l’exception a été levée. Tellement en supprimant la fonction cela fonctionne parfaitement.

return (de m dans objDB.Modules orderby m.ID, sélectionnez new {ID = m.ID, Nom = m.Nom, Status = m.Status == true? 1: 0});

Supprimez simplement votre fonction et cela fonctionnera si vos valeurs ne sont pas nullables

 return ( from m in objDB.Modules orderby m.ID select new { ID = m.ID, Name = m.Name, Status = Convert.ToInt32( m.Status ) } ); 

S’il est nullable, vous devrez vérifier s’il a une valeur:

 return ( from m in objDB.Modules orderby m.ID select new { ID = m.ID, Name = m.Name, Status =m.Status.HasValue? Convert.ToInt32( m.Status ):0 } );