2011-06-27 4 views
0

私はいくつかの製品を持っています。その製品の一部または全部は、特定の提出物に関連している可能性があります。 7つの製品はすべて、クラスProductのサブクラスです。投稿に関連付けられたすべての商品を保存してから、プレゼンテーション層で商品データと商品データを取得する必要があります。私はList<Product>List<object>を使用していましたが、OfType<EPL(specific subclass)>を使用すると暗黙のうちにsystems.generic.IEnumerable<EPL>を 'Product'に変換することはできません。私はキャストしようとしましたが、無駄です。オブジェクト、タイプ、ソート、プルアウトのリストを個別に一覧表示しますか?

prodlist.OfType<EPL>();を使用すると、エラーは発生しませんが、EPL "tempEpl"のインスタンスに保存しようとすると、前述のキャスト関連のエラーが発生します。何がありますか?以下のコード。

ProductService pserv = new ProductService(); 
    IList<object> prodlist = pserv.getProductById(x); 

    EPL tempEpl = new EPL(); 

    if ((prodlist.OfType<EPL>()) != null) 
    {    
     tempEpl = prodlist.OfType<EPL>(); // this throws a conversion error. 

    } 

データ層

List<object> TempProdList = new List<object>(); 

    conn.Open(); 

    SqlCommand EplCmd = new SqlCommand(EPLQuery, conn); 
    SqlDataReader EplRead = null; 
    EplRead = EplCmd.ExecuteReader(); 

    EPL TempEpl = new EPL(); 
    if (EplRead.Read()) 
    { 

     TempEpl.Entity1 = EplRead.GetString(0); 
     TempEpl.Employees1 = EplRead.GetInt32(1); 
     TempEpl.CA1 = EplRead.GetInt32(2); 
     TempEpl.MI1 = EplRead.GetInt32(3); 
     TempEpl.NY1 = EplRead.GetInt32(4); 
     TempEpl.NJ1 = EplRead.GetInt32(5); 
     TempEpl.PrimEx1 = EplRead.GetInt32(6); 
     TempEpl.EplLim1 = EplRead.GetInt32(7); 
     TempEpl.EplSir1 = EplRead.GetInt32(8); 
     TempEpl.Premium1 = EplRead.GetInt32(9); 
     TempEpl.Wage1 = EplRead.GetInt32(10); 
     TempEpl.Sublim1 = EplRead.GetInt32(11); 

     TempProdList.Add(TempEpl); 
    } 

答えて

8

このコードは意味をなさない:

Product tempEpl = new EPL(); 

if ((prodlist.OfType<EPL>()) != null) 
{    
    prodlist.OfType<EPL>(); 
} 
  • あなたは
  • OfType()意志を開始するための新しいEPL()を作成している理由は不明です決してnullを返すことはない - それはempt可能なシーケンスを返すあなたのif声明

の体当たりのそれはOfType()はシーケンスではなく、単一の項目を返すことを理解することが重要だとして、Y

  • OfType()を呼び出すと、自分自身では何も有効ではありません。私はあなたが以前に逃していたものだと思う。

    私はあなたが欲しい疑う:

    Product tempEpl = prodList.OfType<EPL>().FirstOrDefault(); 
    

    これは、そうでないタイプEPLのない要素がprodListに存在しない場合tempEplnullの値を割り当てるか、リストの最初の要素EPLます。

    は(あなたが開始するためにデータ層からList<object>を返している理由は明らかではありません。なぜList<Product>?)私はあなたがリストを返すべきObjectタイプのリストを返すのではなく、DALに考える

  • +0

    。ありがとう。 if!nullについては、提出物にEPL製品が添付されているかどうかを判断する必要があります。私は、新しいtempEpl値でif文を実行できると思います。 –

    +0

    @Brazos:そうです。 –

    3

    Productタイプです。もしそうなら、それを再びタイプProductにキャストする必要はありません。

    第2のものは、PLの代わりに、IListの代わりにListを使用してください。

    関連する問題