2012-01-18 5 views
5

Я создал следующую модель представления для приложения MVC. То, что я хотел бы сделать, это сделать класс IEnumerable, чтобы я мог перебирать данные на своей странице с помощью инструкции foreach.Как сделать этот класс IEnumerable?

public class EstimateDetailsModel 
{ 
    public string dma { get; set; } 
    public string callsign { get; set; } 
    public string description { get; set; } 

} 

В случае, если это уместно, здесь соответствующий Linq запрос в моем хранилище, что инстанцирует EstimatesDetailsModel класс:

public IEnumerable<EstimateDetailsModel> GetEstimateDetails(int id) 
{ 
    var estimateDetails = from e in db.Estimates 
          join es in db.EstimateStations on e.EstimateID equals es.EstimateID 
          join s in db.Stations on es.StationID equals s.StationID 
          join m in db.Markets on s.MarketID equals m.MarketID 
          where e.EstimateID == 1 
          select new EstimateDetailsModel { dma = m.DmaName, callsign = s.CallSign, description = s.StationDescription }; 
    return estimateDetails;         
} 
+0

Не могли бы вы показать пример того, как вы хотите его использовать? Вы имеете в виду, что он перебирает свойства модели? –

+0

Что именно вы хотите сделать IEnumerable? Свойства EstimateDetailsModel? –

+0

Все выглядит отлично. Вы должны иметь возможность выполнять итерацию результатов «GetEstimateDetails()» как есть. – Humberto

ответ

15

Возможно, вы ищете что-то вроде этого:

public class EstimateDetailsModel : IEnumerable<string> 
{ 
    public string Dma { get; set; } 

    public string Callsign { get; set; } 

    public string Description { get; set; } 

    public IEnumerator<string> GetEnumerator() 
    { 
     yield return Dma; 
     yield return Callsign; 
     yield return Description; 
    } 

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return this.GetEnumerator(); 
    } 
} 

(я капитализированной свойства, что является нормальным style.)

+0

Не знал, что вы можете просто сделать голый 'yield return' в методе' IEnumerator'. Ницца. –

0

Это звучит, как вы, возможно, пытается сделать что-то вроде этого?

public class EstimateDetailsModel: List<EstimateDetailsModel.EstimateDetail> 
{ 
    public class EstimateDetail 
    { 
     public string dma { get; set; } 
     public string callsign { get; set; } 
     public string description { get; set; } 
    } 
} 
0

Почему бы просто не использовать свойство в EstimateDetailsModel, что обнажает EstimateDetails из Хранилища? Что-то вроде этого, если вы хотите иметь Repository ссылку на модель:

public class EstimateDetailsModel 
{ 
    public int EstimateID { get; set; } 

    public IEnumerable<EstimateDetailsModel> EstimateDetails 
    { 
     return Repository.GetEstimateDetails(this.EstimateID); 
    } 
} 
0

С отражением можно автоматизировать перечисление имен и значений свойств любого объекта (см. this question, среди others). Но это иногда бывает излишним. Я предполагаю, что вас интересует просмотр EstimateDetailsModel в качестве словаря. Я предлагаю следующее:

public class EstimateDetailsModel : IEnumerable<KeyValuePair<string, string>> 
{ 
    public string Dma { get; set; } 
    public string CallSign { get; set; } 
    public string Description { get; set; } 

    public IEnumerator<KeyValuePair<string, string>> GetEnumerator() 
    { 
     yield return new KeyValuePair<string, string>("Dma", Dma); 
     yield return new KeyValuePair<string, string>("CallSign", CallSign); 
     yield return new KeyValuePair<string, string>("Description", Description); 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 
Смежные вопросы