0

以下は、構築しているASPMVC3サイトで使用する2つのViewModelです。その下のコードでは、という名前の変数のプロパティのTradingPartners IListプロパティを設定しようとしています。AgentIdDetailAgentWithTrainingbigAgent

よりよく説明するために:

bigAgentAgentWithTraining

AgentWithTrainingAgentIdDetail ICollectionプロパティ 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?)

誰かが私が初期化する方法を説明できますかbigAgent.AgentIdDetails?以下は、役立つ場合に備えて、私が使用しているコードの完全なセクションです。

        //Grab Trading partner information and add it to 'trainlist' object
        List<AgentIdToTradingPartner>tradingParter = new List<AgentIdToTradingPartner>();

        var symNumToAgId = from s in db.SymetraNumberToAgentId
                           where s.SymetraNumber == id
                           select s;

        //*******************************************
        //This line is causing the problem
        //*******************************************
        bigAgent.AgentIdDetails = new 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);
        }
4

1 に答える 1

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

良い習慣として、コンストラクターのViewModelsでCollectionプロパティを初期化するのが好きなので、サンプルとして、新しいプロパティが必要でない限り、入力するときに初期化について心配する必要はありません。

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>();
    }
}
于 2013-02-08T23:42:42.673 に答える