下面是我们在我们正在构建的ASP MVC3站点中使用的两个ViewModel。在下面的代码中,我尝试填充名为TradingPartners
的{{1}}变量的IList
属性的AgentIdDetail
AgentWithTraining
属性。
为了更好地说明:
bigAgent
是bigAgent
AgentWithTraining
有一个AgentWithTraining
AgentIdDetail
列表对象作为属性
ICollection
的{{1}}列表对象名称为AgentIdDetail
IList
问题是以下代码行:
TradingPartner
这给了我错误:
public class AgentWithTraining
{
public Monet.Models.Agent Agent { get; set; }
public ICollection<AgentProdTrainDetail> AgentProdTrainDetails { get; set; }
public ICollection<AgentIdDetail> AgentIdDetails { get; set; }
}
public class AgentIdDetail
{
public string AgentId { get; set; }
public string CompanyCode { get; set; }
public IList<string> TradingPartners { get; set; }
}
有人可以解释我需要如何初始化bigAgent.AgentIdDetails = new AgentIdDetail();
吗?以下是我正在使用的完整代码部分,以防万一有用。
Cannot implicitly convert type 'Monet.ViewModel.AgentIdDetail' to 'System.Collections.Generic.ICollection<Monet.ViewModel.AgentIdDetail>'. An explicit conversion exists (are you missing a cast?)
答案 0 :(得分:2)
您无法以这种方式初始化,因为AgentIdDetails
是ICollection<AgentIdDetail>
而不是AgentIdDetail
的单个实例。
您必须初始化集合,然后在此集合上添加新项目。样本:
// initilize as a List<AgentIdDetail>
bigAgent.AgentIdDetails = new List<AgentIdDetail>();
foreach (var s in symNumToAgId)
{
AgentIdDetail item = new AgentIdDetail();
item.AgentId = s.AgentId;
item.CompanyCode = s.CompanyCode;
tradingParter = db.AgentIdToTradingPartner
.Where(r => r.AgentId == s.AgentId).ToList();
item.TradingPartners = new List<string>();
foreach (var t in tradingParter)
{
item.TradingPartners.Add(t.TradingPartner.ToString());
}
bigAgent.AgentIdDetails.Add(item);
}
作为一个很好的实践,我喜欢在构造函数上的ViewModel上初始化我的Collection属性,所以当我填充它时我不需要担心initilize,除非我需要一个新的,为样本:
public class AgentWithTraining
{
public Monet.Models.Agent Agent { get; set; }
public ICollection<AgentProdTrainDetail> AgentProdTrainDetails { get; set; }
public ICollection<AgentIdDetail> AgentIdDetails { get; set; }
public AgentWithTraining()
{
this.AgentProdTrainDetails = new List<AgentProdTrainDetail>();
this.AgentIdDetails = new List<AgentIdDetail>();
}
}