2016-12-03 1 views
2

J'ai une liste IEnumerable avec la valeur multiple, et je veux foreach sur ses valeurs. J'ai ce codeComment préformer foreach dans un objet IEnumerable

IEnumerable<object> Place = db.Places.Select(x => new { Id = x.Id, Nam1 = x.Name1, Name2 = x.Name2); 

foreach(dynamic thisPlace in Place) 
{ 
    Response.Write (thisPlace.Id) 
    Response.Write (thisPlace.Name1) 
    Response.Write (thisPlace.Name2) 
} 

Ce travail Code fin et après cela se fait, il renvoie une erreur:

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Place_F6C785C74658C47ED4BFCF45D13FE7D754CCA2F688B6CBDD079244CE52B46291'."

Maintenant, la question est de savoir comment faire foreach avec IEnumerable la bonne façon?

+0

ce qui est ici Voyages? – Sajeetharan

+0

C'est faux Je vais le modifier – khaled

+0

Vous êtes mieux de lire un livre C#. Si vous souhaitez utiliser var au lieu de IEnumerable . Ensuite, si vous utiliseriez var comme une variable de boucle au lieu de dynamique - tout irait bien. Aussi vous voudriez .ToList() ou .ToArray() votre énumérable. C'est une "meilleure pratique". –

Répondre

3

Tout d'abord, votre code ne sera pas exécuté. Parce que vous n'avez pas de propriété nommée Name1 comme vous l'avez montré dans le code.

Deuxièmement, même si vous avez, vous devez utiliser var au lieu d'utiliser IEnumerable<object>

var Places = db.Places.Select(x => new { Id = x.Id, Nam1 = x.Name1, Name2 = x.Name2}).ToList(); 
foreach (var thisPlace in Places) 
{ 
    Response.Write(thisPlace.Id) 
    Response.Write(thisPlace.Name1) 
    Response.Write(thisPlace.Name2) 
} 
+0

S'il vous plaît expliquer votre réponse, pourquoi cela fait-il une différence? – Ehssan

+0

Ce code fonctionne très bien ainsi que mon code .... mais comme je l'ai dit l'erreur est après que le code est fait exécution ... alors je trouve le problème un peu ailleurs et le résoudre, merci – khaled