2017-09-13 10 views
0

ループの同じタイプのプロパティにオブジェクトのリストを割り当てようとしていますが、割り当てることができません。ListをIEnumerableオブジェクトに割り当てることができません

いつもnullになっています。

public IEnumerable<AppointmentModel> AddProducts (IEnumerable<AppointmentModel> apps) 
{ 
    foreach(var app in apps) 
    { 
     var products = new List<ProductsEntity> 
     { 
      new ProductsEntity {Id = "A", Desc = "ABC"}, 
      new ProductsEntity {Id = "B", Desc = "ABC"}, 
      new ProductsEntity {Id = "C", Desc = "ABC"} 
     } 
     app.Products = products; // Values are successfully getting assigned here 
    } 
    return apps; //apps.FirstOrDefault().Products is Null here 
} 

public class AppointmentModel 
{ 
    public int Id {get;set;} 
    public IEnumerable<ProductEntity> Products {get;set;} 
} 

私はまたのIQueryableとのIListに自分のアプリを変換しようとしたが、あなたがすでにforeachループでアプリケーション変数を列挙ヌルのみ

+2

いくつかの誤字を修正した後、あなたのコードは正常に動作します:あなたがnullを取得し、あなたがにデータを渡す方法を示していないところhttps://dotnetfiddle.net/5MUV0M私はあなたの問題はどこか別の場所だと思う... – ChrFin

+2

を提示してください'AddProducts'です。空のコレクションを渡していないことは確かですか? –

+0

私はあなたの問題が**遅延**実行であると確信しています。 'apps'はどこから来たのですか?配列やリストとして宣言されていないので、反復するたびに_enumeratedと仮定します。したがって、FirstOrDefault()を呼び出すと、新しいインスタンスが作成されます。 –

答えて

1

が来ています。ループの後、最初の要素にアクセスしようとしますが、列挙子は既にリストの終わりに達しています。

配列の要素を取得した場合、そのような問題は発生しません。

これを試してください。

public IEnumerable<AppointmentModel> AddProducts(IEnumerable<AppointmentModel> apps) 
    { 
     var appointmentModels = apps as AppointmentModel[] ?? apps.ToArray(); 
     foreach (var app in appointmentModels) 
     { 
      var products = new List<ProductsEntity> 
      { 
       new ProductsEntity {Id = "A", Desc = "ABC"}, 
       new ProductsEntity {Id = "B", Desc = "ABC"}, 
       new ProductsEntity {Id = "C", Desc = "ABC"} 
      }; 
      app.Products = products; // Values are successfully getting assigned here 
     } 
     return appointmentModels; //apps.FirstOrDefault().Products is Null here 
    } 
+0

それを解決する可能性のある_guess_(遅延実行がここにあった場合)。しかし、あなたの答えは、それが問題を解決する理由とその理由を説明するとより良いでしょう。 –

+0

配列に変換した後になぜ機能するのか説明してください。 – siddharth

関連する問題