2016-11-01 1 views
0

私は特にMVCとlinqとviewmodelsでかなり新しいです。私は、作成するためのインデックスビューを取得することができました。 「挿入」は「リスト」ほど難しくありませんでした。このlinqコードからforeachを削除するにはどうすればよいですか?

私はこのLINQクエリ持っている:私はわからないんだけど何

public ActionResult Index() 
     { 
      List<BlendElVM> BEVM = new List<BlendElVM>(); 
      var list = (from Blend in db.blends 
         join BlendEl in db.blendEl on Blend.ID equals BlendEl.ID 
         select new 
         { 
          Blend.ID, Blend.Title, Blend.TransDt, BlendEl.Comment 
         }).ToList(); 

      foreach (var item in list) 
       { 
        BlendElVM o = new BlendElVM(); // ViewModel 
        o.Comment = item.Comment; 
        o.Title = item.Title; 
        o.TransDt = item.TransDt; 
        o.ID = item.ID; 
        BEVM.Add(o); 
       } 
      return View(BEVM);   
     } 

は "foreachの" セクションです。私がデバッグで走っているとき、 "リスト"はうまく表示されますが、私が "foreach"をコメントアウトするとエラーが発生します。つまり、モデルを期待していません。 foreachは何をしていますか?データベースと関係がありますが、 "o"を使用している場所と列を設定する場所はわかりません。私はそれがすべて1つのlinqクエリにあると思った。 2つを組み合わせて "foreach"を削除することは可能ですか?

私はforeachのは、あなたが持っているこの場合にオブジェクトのすべての要素を読み取るために必要であると信じてい
+0

model-view-controllerタグはパターンに関する質問のためのものです。 ASP.NET-MVCの実装には特定のタグがあります。 –

+0

クエリは、匿名オブジェクトのコレクションを作成しています。ビューは 'BlendElVM'のコレクションを期待しているので、ループはクエリが返す値に基づいてそのオブジェクトのコレクションを生成しています - 必ずしも必要ではありません - Robert Harveyのようにビューモデルにクエリを投影できます回答。 –

答えて

5
 var BEVM = (from blend in db.blends 
        join BlendEl in db.blendEl on Blend.ID equals BlendEl.ID 
        select new BlendELVM 
        { 
         ID = blend.ID, 
         Title = blend.Title, 
         TransDT = blend.TransDt, 
         comment = blendEl.Comment 
        }).ToList(); 
+0

これをDB Queryableに対して行うと、BlendELVMにプリミティブ型(文字列、ints、datetimes、boolなど)しか含まれていない限り、この方法を使用できます。複雑なプロパティは許可されず、割り当てられていなくても許可されません。 –

+0

クエリのスペルを修正しましたが、新しい問題が発生しました。「エンティティまたは複合型 'vmTwo.Models.BlendElVM'をLINQ to Entitiesクエリで構築できません」。作業? –

+0

あなたは 'VAR BEVM = list.Select(新しいBlendELVM { ID = blend.ID、 タイトル= blend.Title、 TransDT = blend.TransDt、 コメント= blendElのように、選択するために、foreachのを変換することができます。コメント })。ToList(); ' –

0

BlendElVM o = new BlendElVM();

だから、あなたが作成し、「O」という名前のオブジェクトですタイプBlendELVMと、このオブジェクトのあなたがである前に宣言されたすべての属性が含まれていますなど

ID、タイトル、TransDT、あなたが入れたときに:

foreach (var item in list) 
      { 
       BlendElVM o = new BlendElVM(); // ViewModel 
       o.Comment = item.Comment; 
       o.Title = item.Title; 
       o.TransDt = item.TransDt; 
       o.ID = item.ID; 
       BEVM.Add(o); 
      } 

あなたはリスト内で読んでいるアイテムを新しいオブジェクトに割り当てます。最後にそれをBVEMリストに追加し、それらを組み合わせることができたら答えるでしょう。最初はあなたがクエリを宣言し、次にリストの項目を読み込み、それらをBEVMリストにアサインする

関連する問題