7
votes

foreach in linq résultat ne fonctionne pas

Je ne sais pas ce qui ne va pas ici, lorsque j'exécute l'application, il est indiqué que "la méthode spécifiée n'est pas prise en charge" pointant sur "résultat variable dans la requête" dans la boucle de Foreach. S'il vous plaît aider ...

var query = from c in entities.Customer
            select c.CustomerName;

List<string> customerNames = new List<string>();

foreach (var result in query)
{
    customerNames.Add(result.ToString());  
}


2 commentaires

à quelle ligne? Le seul endroit apparent pour l'erreur est le résultat.


est une console.writeine ​​(résultat.Tostring ()); travail?


5 Réponses :


2
votes

Pouvez-vous essayer d'utiliser uniquement la méthode tolist () code> au lieu du foreach code>?

List<string> customerNames = query.ToList();


2 commentaires

C'est définitivement la voie à suivre mais je ne vois pas comment cela résout le problème.


Oui, ce sera la bonne façon de remplir la liste de la requête. Le plus simple possible.



0
votes

Essayez de supprimer .tostring () code> et voyez si cela fonctionnera:

foreach (var result in query)
{
    customerNames.Add(result);  
}


0 commentaires

0
votes

Essayez ceci xxx


0 commentaires

1
votes

Si le problème n'est pas Tostring () comme Gart mentionné ma deuxième chutes suspectes dans C.Customername . Est-ce une propriété personnalisée dans votre classe partielle?

En outre, la structure de l'exception doit indiquer surlose quelle est la méthode non prise en charge.


0 commentaires

7
votes

La raison de votre erreur est la portée, ce que la "méthode non prise en charge" "vous dit.

Cela se produit généralement lors de l'utilisation d'une linq pour [remplir dans le blanc] orm. Donc, je suppose que vos entités doivent provenir d'un outil orm, quelque chose comme le cadre d'entité, et vous utilisez quelque chose comme Linq vers des entités. P>

Lorsque vous utilisez LINQ, votre requête n'est pas énumérée avant d'y accéder. , qui pour un orj signifie frapper la base de données ou autre référentiel de données. Cette action retardée peut entraîner un comportement étrange si vous ne le savez pas, c'est là, tel que cette erreur. P>

mais, vous avez un code local (non linq) et votre requête entrelacée, donc la linq à [ ] Le compilateur ne sait pas comment gérer votre code local lors de la compilation du code LINQ. Ainsi, l'erreur "méthode non prise en charge" - elle est fondamentalement la même que de référencer une méthode privée de l'extérieur de la classe, la méthode que vous appelée est inconnue dans la portée actuelle. P>

En d'autres termes, le compilateur essaie Pour compiler votre requête et appuyez sur la base de données lorsque vous effectuez le résultat.Tostring (), mais ne sait rien à propos de la variable privée des noms personnalisés ou de la méthode de Foreach. La logique de la base de données et la logique d'objet locale doivent être séparées - résolvez complètement les résultats de la requête de la base de données avant d'utiliser localement. P>

Vous devriez pouvoir l'écrire comme ceci: P>

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());  
}


1 commentaires

Vous avez raison que j'utilise le cadre d'entité. Utilisation de votre solution, je reçois la même erreur dans cette ligne: Var Qrylist = Query.tolist (); Merci pour votre bonne explication.