Maison > développement back-end > C++ > Comment résoudre l'exception « LINQ to Entities ne reconnaît pas la méthode 'System.String ToString()' » ?

Comment résoudre l'exception « LINQ to Entities ne reconnaît pas la méthode 'System.String ToString()' » ?

DDD
Libérer: 2025-01-22 09:17:09
original
535 Les gens l'ont consulté

How to Resolve the

Dépannage de l'erreur « Méthode ToString() non reconnue » dans LINQ to Entities

Lorsque vous travaillez avec LINQ to Entities, vous pouvez rencontrer l'erreur « LINQ to Entities ne reconnaît pas la méthode 'System.String ToString()'. » Cela se produit parce que LINQ to Entities a du mal à traduire la méthode ToString() en une requête compatible avec la base de données. La solution consiste à éviter l'utilisation directe de ToString() dans la requête LINQ.

Voici un exemple de code révisé qui résout ce problème :

<code class="language-csharp">using (var context = new Context())
{
    // ...

    foreach (var item in collection)
    {
        string strItem = item.Key.ToString(); // Assign ToString() result to a variable

        IQueryable<entity> pages = from p in context.pages
                                   where p.Serial == strItem
                                   select p;
        foreach (var page in pages)
        {
            DataManager.AddPageToDocument(page, item.Value);
        }
    }

    Console.WriteLine("Done!");
    Console.Read();
}</code>
Copier après la connexion

En pré-attribuant le résultat de item.Key.ToString() à la variable strItem, nous contournons le problème de traduction. La clause where utilise désormais une chaîne littérale, que le fournisseur LINQ to Entities peut gérer efficacement.

Approche alternative : tirer parti de SQLFunctions

Entity Framework propose la classe d'assistance SqlFunctions, fournissant des fonctions spécifiques à la base de données. Cela offre une solution plus élégante pour des cas comme celui-ci. La méthode SqlFunctions.StringConvert permet la conversion au sein de la requête de base de données elle-même.

Voici comment mettre en œuvre cette solution :

<code class="language-csharp">using (var context = new Context())
{
    // ...

    foreach (var item in collection)
    {
        IQueryable<entity> pages = from p in context.pages
                                   where SqlFunctions.StringConvert((double?)p.Serial) == item.Key.ToString() //Note the cast to (double?) if needed
                                   select p;
        foreach (var page in pages)
        {
            DataManager.AddPageToDocument(page, item.Value);
        }
    }

    Console.WriteLine("Done!");
    Console.Read();
}</code>
Copier après la connexion

Cette approche conserve la conversion de chaîne dans la requête de base de données, améliorant ainsi l'efficacité et évitant les erreurs de traduction. Notez que SqlFunctions.StringConvert nécessite souvent de convertir le champ de la base de données en un type approprié (par exemple, (double?)p.Serial si p.Serial est un type numérique). Ajustez la distribution si nécessaire pour qu'elle corresponde au schéma de votre base de données. Cette méthode est généralement préférée pour de meilleures performances et un code plus propre.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal