特定のviewModelsをビューに渡すためにこれを行うための推奨事項を見た後、ドメインモデルをASP.NETMVCのビューモデルにマッピングするという概念を始めています。
1つのドメインモデルからより少ないプロパティを持つより単純なビューモデルへの基本的なマッピングを管理することができましたが、より複雑なビューモデルを作成する必要があり、それを理解できません。私は次のドメインモデルを持っています
public class Club
{
public int ClubID { get; set; }
public string FullName { get; set; }
public string Description { get; set; }
public string Telephone { get; set; }
public string URL { get; set; }
public DateTime CreatedDate { get; set; }
public virtual ICollection<Member> Members{ get; set; }
}
public class Member
{
public int MemberID{ get; set; }
public string Name { get; set; }
public MemberType Membership{ get; set; }
public virtual Club Club { get; set; }
public virtual int ClubID { get; set; }
}
public enum MemberType
{
Standard,
Special,
Limited
}
このようなビューモデルにマップしたい(注:意味があると思うので、このように分割しましたが、よくわかりません)...
public class ClubDetailsViewModel
{
public int ClubID { get; set; }
public string FullName { get; set; }
public string Description { get; set; }
public IList<ClubDetailsMemberSummaryViewModel> Members { get; set; }
}
public class ClubDetailsMemberSummaryViewModel
{
public MemberType Membership { get; set; }
public int MemberCount { get; set; }
}
私が最終的にしようとしているのは、クラブの詳細の一部と、会員数を含むクラブの会員タイプの要約レポートを表示するページです。そのような:
Some Club Name
Description of the club.....
CLUB MEMBERS
Limited - 15
Standard - 100
したがって、ビューモデルはこれに適していると思います(ただし、これを行うにはより良い方法かもしれません)。私が苦労しているのは、要素をマッピングする方法です。クラブにメインフィールドをクラブビューモデルにマップさせることはできますが、クラブのリストの結果をビューモデルにマップし、それをメインビューモデルにリストとして追加する方法を実際に理解することはできません。
これを使用してリポジトリからクラブを取得しています
var clubs = _clubRepository.GetClubByID(ID);
次に、これを使用して、データアクセス層のインクルードを使用して返されるCourtsをエンティティフレームワークから変換できます
var grpCourts = from c in clubs.Members
group c by c.Membership into grp
select new { st = grp.Key, count = grp.Distinct().Count() };
結果のレコードをループしてClubDetailsMemberSummaryViewModelにマップし、それらのリストをメインのClubDetailsViewModelに追加するにはどうすればよいですか?