Dépannage « Méthode 'System.String ToString()' non reconnue » dans LINQ to Entities
Les projets de migration de bases de données rencontrent souvent l'erreur frustrante « LINQ to Entities ne reconnaît pas la méthode 'System.String ToString()' ». Cela se produit car LINQ to Entities ne peut pas traduire l'appel de méthode ToString()
dans votre requête LINQ en une expression compatible avec la base de données. Le problème se pose spécifiquement lors de l'utilisation de ToString()
sur un champ de chaîne directement dans une requête LINQ.
La solution : prétraiter la conversion de chaîne
La solution la plus simple consiste à éviter d'utiliser ToString()
dans la requête LINQ elle-même. Au lieu de cela, effectuez la conversion de chaîne au préalable, en attribuant le résultat à une variable. Cela sépare la manipulation de chaîne de la traduction de requête de base de données. Exemple :
<code class="language-csharp">string strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
En pré-convertissant la chaîne, ToString()
s'exécute avant que la requête LINQ ne soit traduite en SQL, évitant ainsi l'erreur.
Alternative : SqlFunctions d'Entity Framework (versions ultérieures)
Les versions plus récentes d'Entity Framework offrent une solution plus élégante via la classe d'assistance SqlFunctions
. Cette classe fournit une méthode ToString()
spécialement conçue pour être utilisée dans les requêtes LINQ, éliminant le besoin de variables temporaires. Cela permet d'obtenir un code plus compact et lisible.
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!