2016-08-31 8 views
0

モデル:は、暗黙的にC#でクラスのプロパティに型」System.Collections.Generic.Listを変換できません

public class DataResult<T> 
{ 
    public List<T> ViewResults; 
} 

public class oGateEntryViewModel 
{ 
    public DataResult<GateEntryModels> oListGateEntryModels { get; set; } 
} 

コントローラ:私はシングルに複数のリストの結果をラップしようとしている

GateEntryViewModel oGateEntryViewModel = new GateEntryViewModel(); 
IGateEntryBC oIGateEntryBC = new GateEntryBC(); 
oGateEntryViewModel.oListGateEntryModels = oIGateEntryBC.oGetGateEntryData(); --Error 
return View(oGateEntryViewModel); 

oIGateEntryBC.oGetGateEntryData(); -> This method is returning the list Results. 


public List<GateEntryModels> oGetGateEntryData() 
{ 
    DataAdapters oDataAdapters = new DataAdapters(); 
    List<DataParameters> oListparams = new List<DataParameters>(); 
    DataParameters oDataparam; 
    oDataparam = new DataParameters("@TYPE", SqlDbType.Int, (Int32)GateEntryEntities.EnumGateEntry.GateEntryList); 
    oListparams.Add(oDataparam); 
    DataTable dtList= oDataAdapters.GetData<DataTable>(oListparams, "PROC_GATEENTRY"); 

    return dtList.AsEnumerable().Select(i => new GateEntryModels() 
    { 
     GEID = int.Parse(i["GE_ID"].ToString()), 
     GE_NO = i["GE_NO"].ToString(), 
     TRANSPORTER = i["TRANSPORTER"].ToString() 
    }).ToList(); 
} 

モデルを作成し、モデルをバインドして表示します。リストの値をoListGateEntryModelsプロパティに代入しようとしたときに、エラーがスローされました。これをどうやって解決するのですか?

エラー:

Cannot implicitly convert type ' System.Collections.Generic.List<TS.Models.GateEntryModels> ' to ' TS.Models.DataResult<TS.Models.GateEntryModels> '

+5

これは、コンパイル?ビューとして返すようにしようとしているoGateEntryModelsオブジェクトは表示されません。ただし、最も明らかな型の問題は、コンパイラがList を暗黙的にDataResult に変換することを期待していることです。変換を処理する拡張メソッドを記述することができます。オブジェクト継承チェーンに応じて明示的に変換することも、明示的キャストを受け入れることもできます。ViewModelで型を更新するだけでも可能です。 –

+0

ハンガリー語表記法( "oIGateEntryBC'"の "o'")を古いものにすると、C#開発者が通常はそれを見ないようにコードを読みにくくなります。 –

+0

私はこのようなオブジェクトを作成するために使用しました。クラスオブジェクトと変数の違いを特定するためです。 –

答えて

1

あなたはが直接できませんリストが、含まれているタイプのリストを「変換」しようとしています。

最も簡単な解決策は、代わりにプロパティを割り当てることです:

oGateEntryViewModel.oListGateEntryModels.ViewResults = oIGateEntryBC.oGetGateEntryData(); 

または

oGateEntryViewModel.oListGateEntryModels = new DataResult<GateEntryModels> 
    { 
     ViewResults = oIGateEntryBC.oGetGateEntryData() 
    }; 

あなたが最初oListGateEntryModelsプロパティを初期化する必要がある場合。

+0

ありがとうございます。その作業:) –

+0

oGateEntryViewModel.oListGateEntryModels =新しいDataResult { ViewResults = oIGateEntryBC.oGetGateEntryData() }; –

0

あなたが明示的に変換を行う必要があり、変換するために、これを試してみてください。

List<GateEntryModels> listName = dtList.AsEnumerable().Select(i => new MyType() 
{ 
    GEID = i.Field<string>("GE_ID"), 
    GE_NO = i.Field<string>("GE_NO"), 
    TRANSPORTER = i.Field<double>("TRANSPORTER ") 
}).ToList(); 

return listName; 
+0

私はすでに同じことをしました。 –

関連する問題