2012-01-18 12 views
5

Creé el siguiente modelo de vista para una aplicación MVC. Lo que me gustaría hacer es convertirlo en una clase IEnumerable para que pueda iterar a través de los datos en mi página usando una declaración foreach.¿Cómo puedo hacer que esta clase sea IEnumerable?

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

} 

En caso de que sea relevante, aquí es la consulta LINQ que corresponde en mi repositorio que crea la instancia de la clase 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

¿Podría mostrar un ejemplo de cómo desea usarlo? ¿Quiere decir que debe iterar sobre las propiedades del modelo? –

+0

¿Qué es exactamente lo que quiere hacer IEnumerable? Propiedades de EstimateDetailsModel? –

+0

Todo se ve bien. Debería poder iterar a través de los resultados de 'GetEstimateDetails()' como está. – Humberto

Respuesta

15

Tal vez usted está buscando algo como esto:

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

(he capitalizado las propiedades, que es lo normal style.)

+0

No sabía que podía hacer un 'retorno de rendimiento' desnudo en un método' IEnumerator'. Bonito. –

0

Parece que usted podría estar tratando de hacer algo como esto?

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

Por qué no utilizar una propiedad en la que expone los EstimateDetailsModel EstimateDetails desde el repositorio? Algo como esto, suponiendo que tendría una referencia en el repositorio del modelo:

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

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

Con la reflexión es posible automatizar la enumeración de los nombres y valores de propiedades de cualquier objeto (ver this question, entre others). Pero a veces es excesivo. Supongo que está interesado en ver EstimateDetailsModel como un diccionario. Sugiero lo siguiente:

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