2012-02-29 23 views
1

私は非常に単純なEF(CodeFirst)構造をMVC4アプリケーションに持っています。私のコントローラでコントローラの出力とビューのプロパティの間のMVCの不一致

私はこの単純なクエリがあります。

var activity = db.Activities.Where(a => a.Engagement.Id == Id); 

マイビューは問題なく、このクエリの結果を処理することができます。

ただし、クエリを作成するときに、テーブルを自分のアクティビティテーブルに追加する必要があります。このクエリは私のために働きます:

var activity = from a in db.Activities 
         join m in db.Members on a.MemberID equals m.Id 
         where a.Engagement.Id == Id 
         select new 
         { 
          a.Description, 
          a.ActivityDate, 
          a.EngagementStageValue, 
          a.Hours, 
          m.Email, 
         }; 

問題は、ビューがクエリの結果を解釈できないことです。私はこのエラーを取得する:辞書に渡さ

モデルアイテムは型である「System.Data.Entity.Infrastructure.DbQuery 1[<>f__AnonymousType1 5 [可能System.String、System.DateTimeで、可能System.Int32、可能System.Int32を、 System.String]] 'この辞書には、' System.Collections.Generic.IEnumerable`1 [DomainClasses.Activity] 'という型のモデル項目が必要です。

私はMVCとEF(厄介な学習曲線)に比較的新しいので、どんな助けも素晴らしいでしょう。
ありがとうございます!

答えて

2

あなたはとても必要な性質を持っていますActivityModelクラスを定義します。

public class ActivityModel 
{ 
    public string Description {get; set;} 
    public DateTime ActivityDate {get; set;} 
    public yourtype EngagementStageValue {get; set;} 
    public DateTime Hours {get; set;} 
    public string Email {get; set;} 

    //you can also add new properties to get a cleaner view for an example 
    public string ActivityDateShort{ 

     get{ 
      return ActivityDate.ToShortDateString(); 
     } 

} 

var activity = (from a in db.Activities 
         join m in db.Members on a.MemberID equals m.Id 
         where a.Engagement.Id == Id 
         select new ActivityModel 
         { 
          Description = a.Description, 
          ActivityDate = a.ActivityDate, 
          EngagementStageValue = a.EngagementStageValue, 
          Hours = a.Hours, 
          Email = m.Email, 
         }).ToList(); 

ので、あなたがリストを取得し、あなたのビューにこれを渡しモデルとして、あなたがそれを好きなものを行います。よろしく、

0

匿名型を生成しており、そのビューが強く型付けされているからです。基本的には、 'Email'フィールドを追加したときに新しいタイプを作成しましたが、ビューではそれをどうするのかわかりません。

+0

ありがとう、私はそれを理解しています。回避策はありますか?追加プロパティに対応するためにビューを変更するにはどうすればよいですか? – Chris

+0

通常、追加のフィールドを追加するViewModelを作成します。あなたの場合、それはViewModelsのコレクションであることになります。しかし、おそらくよりスマートな方法があります。 –