Как мне сделать этот класс IEnumerable? - PullRequest
5 голосов
/ 18 января 2012

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

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

Ответы [ 4 ]

15 голосов
/ 18 января 2012

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

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

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

0 голосов
/ 18 января 2012

При помощи отражения можно автоматизировать перечисление имен и значений любых свойств объекта (см. этот вопрос , среди другие ). Но это иногда излишне. Я предполагаю, что вы заинтересованы в просмотре 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();
    }
}
0 голосов
/ 18 января 2012

Почему бы просто не использовать свойство в EstimateDetailsModel, которое предоставляет EstimateDetails из репозитория?Примерно так, при условии, что у вас есть ссылка на репозиторий в модели:

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

    public IEnumerable<EstimateDetailsModel> EstimateDetails
    {
        return Repository.GetEstimateDetails(this.EstimateID);
    }
}
0 голосов
/ 18 января 2012

Похоже, вы пытаетесь сделать что-то подобное?

public class EstimateDetailsModel: List<EstimateDetailsModel.EstimateDetail>
{
    public class EstimateDetail
    {
        public string dma { get; set; }
        public string callsign { get; set; }
        public string description { get; set; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...