繁体   English   中英

如何让这个类成为IEnumerable?

[英]How do I make this class an IEnumerable?

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

也许你正在寻找这样的东西:

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

(我已将这些属性大写,这是正常的风格。)

听起来你可能会尝试做这样的事情?

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

为什么不在EstimateDetailsModel中使用一个属性来从Repository中公开EstimateDetails? 这样的事情,假设你在模型中有一个Repository引用:

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

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

通过反射,可以自动枚举任何对象的属性名称和值(请参阅此问题 )。 但它有时有点矫枉过正。 我假设您有兴趣将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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM