La raison de votre erreur est portée, qui est ce que l'erreur "méthode non prise en charge" vous indique. Cela se produit généralement lors de l'utilisation d'un Linq pour [remplir l'ORM vierge]. Donc, je suppose que vos entités doivent provenir d'un outil ORM, quelque chose comme Entity Framework, et que vous utilisez quelque chose comme Linq to Entities. Lorsque vous utilisez linq, votre requête n'est pas énumérée jusqu'à ce que vous y accédiez, ce qui pour un ORM signifie cliquer sur la base de données ou un autre référentiel de données. Cette action retardée peut provoquer un comportement étrange si vous ne le savez pas, comme cette erreur. Mais, vous avez un code local (non-linq) et votre requête entrelacée, donc le compilateur linq to [] ne sait pas comment gérer votre code local lors de la compilation du code linq. Ainsi, l'erreur "méthode non supportée" - c'est fondamentalement la même chose que de référencer une méthode privée depuis l'extérieur de la classe, la méthode que vous avez appelée est inconnue dans la portée actuelle.
En d'autres termes, le compilateur tente de compiler votre requête et de la lire lorsque vous faites le résultat. ToString(), mais ne sait rien de la variable privée de CustomerNames ou de la méthode foreach. La logique de la base de données et la logique de l'objet local doivent être séparées - résolvez complètement les résultats de la requête de la base de données avant de l'utiliser localement.
Vous devriez pouvoir l'écrire comme ceci:
var customerNames = entities.Customer.Select(c => c.CustomerName).ToList();
Si vous devez garder le foreach (pour la logique plus complexe, non pas pour ce simple d'un exemple), vous avez encore besoin de résoudre le Linq à [] partie (en le forçant à énumérer les résultats de la requête) avant d'impliquer tout code non-linq:
var query = from c in entities.Customer
select c.CustomerName;
var qryList = query.ToList();
List<string> customerNames = new List<string>();
foreach (var result in qryList)
{
customerNames.Add(result.ToString());
}
à quelle ligne? Le seul endroit apparent pour l'erreur est le résultat. –
Qu'est-ce que "entités"? –
fait un Console.WriteLine (result.ToString()); travail? –