如何使此类成为IEnumerable
本文关键字:IEnumerable 何使此 | 更新日期: 2023-09-27 18:20:49
我为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中使用一个属性来公开存储库中的EstimateDtails?类似这样的东西,假设您在模型中有一个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();
}
}