2016-12-03 5 views
2

У меня есть список IEnumerable с несколькими значениями в нем, и я хочу foreach над его значениями. У меня есть этот кодКак подготовить foreach в объекте 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) 
} 

Этот код отлично работает и после того, как это сделано, он выдает ошибку:

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

Теперь вопрос заключается в том, чтобы сделать foreach с IEnumerable правильный путь?

+0

что экскурсии здесь? – Sajeetharan

+0

Неправильно, я его исправлю – khaled

+0

Вам лучше читать некоторые книги C#. Если вы будете использовать var вместо IEnumerable . Тогда, если вы будете использовать var как переменную цикла вместо динамической - все будет хорошо. Также вы хотели бы использовать .ToList() или .ToArray() для вашего перечисления. Это «лучшая практика». –

ответ

3

Прежде всего, ваш код не будет выполнен. Поскольку у вас нет свойства с именем Name1, как вы показали в коде.

Во-вторых, даже если у вас есть, вы должны использовать var вместо использования 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

Пожалуйста, объясните свой ответ, почему это имеет значение? – Ehssan

+0

Этот код работает отлично, как и мой код .... но, как я уже сказал, ошибка после выполнения кода выполняется ... тогда я выясняю проблему где-то еще и решаю ее, спасибо – khaled