ToString()
problème de traduction de méthodeLe problème :
L'exécution d'une requête LINQ to Entities incorporant la méthode ToString()
entraîne souvent une erreur : "LINQ to Entities ne reconnaît pas la méthode 'System.String ToString()', et cette méthode ne peut pas être traduite en une expression de magasin ". Cela se produit car ToString()
n'est pas directement traduisible en SQL.
La cause profonde :
Entity Framework (EF) traduit les requêtes LINQ en SQL pour l'exécution de la base de données. Puisque ToString()
est une méthode .NET et non une fonction SQL, le processus de traduction échoue.
La solution :
La solution la plus fiable est d'éviter d'appeler ToString()
directement dans la requête LINQ. Au lieu de cela, stockez le résultat de ToString()
dans une variable avant de l'utiliser dans votre requête. Cela permet à EF de traduire correctement la requête.
<code class="language-csharp">string strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
Alternative dans EF Core :
Les versions plus récentes d'EF Core fournissent la méthode SqlFunctions.StringConvert
, offrant une approche plus directe pour les conversions de chaînes dans les requêtes LINQ, éliminant souvent le besoin de variables temporaires. Cependant, l'approche variable reste une solution robuste et largement compatible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!