1

私の最初のテーブルは次のとおりです。

最初のテーブル名: Contacts
ContactID (PK)
FirstName
LastName
Company

2 番目のテーブル名: Phones
ContactID (FK)
PhoneType
PhoneNumber

私のビューモデルは

public class ContactVM2
{
    public int ContactID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }

    public string PhoneType { get; set; }
    public string PhoneNumber { get; set; }
}

リポジトリクラスは

public class ContactRepository
{
    ContactsDBEntities dbRepo = new ContactsDBEntities();

    public List<ContactVM> GetAllContacts()
    {
        List<ContactVM> ContactViewList = new List<ContactVM>();

        var allContacts = dbRepo.Contacts.ToList();
        var allPhones = dbRepo.Phones.ToList();

        foreach (var cont in allContacts)
        {
            foreach (var ph in allPhones)
            {
                if (cont.ContactID == ph.ContactID)
                {
                    ContactViewList.Add(new ContactVM(){
                        ContactID =cont.ContactID,
                        FirstName=cont.FirstName,
                        LastName=cont.LastName,
                        Company=cont.Company,
                        PhoneType=ph.PhoneType,
                        PhoneNumber=ph.PhoneNumber});
                }
            }
        }

        return ContactViewList;
    }        
}

そしてコントローラーは

public ActionResult Index()
    {
        ContactRepository contRepo = new ContactRepository();

        var allContacts = contRepo.GetAllContacts().ToList();

        return View(allContacts);
    }

連絡先テーブルに次のデータがあります
ContactID FirstName LastName Company
1 Bill Gates Microsoft

および Phones テーブルの
ContactID PhoneType PhoneNumber
1 Home 1111
1 Office 2222

次の結果が得られます
1 Bill Gates Home 1111
1 Bill Gates Office 2222

連絡先の詳細が繰り返される場所。
次の結果が必要です
1 Bill Gates Home 1111
                            Office 2222
View で次の変更も試しました

 <td style="border:2px solid Blue;">
        @{
        foreach (var parent in Model.Where(x=>x.ContactID==item.ContactID).GroupBy(m=>m.PhoneNumber))
       {   
          foreach( var itm in parent )
           {                
             @itm.PhoneNumber <br />
          }    
          } 
          }
    </td>
    <td style="border:2px solid red;">
        @{
        foreach (var parent in Model.Where(x=>x.ContactID==item.ContactID).GroupBy(m=>m.PhoneType))
       {   
          foreach( var itm in parent )
           {                
             @itm.PhoneType <br />
          }    
          } 
          }
    </td>

しかし、それはまだ記録を繰り返しています。
次に、ModelViewの変更をたどってみました

    public List<string> PhoneType { get; set; }
    public List<string> PhoneNumber { get; set; }

しかし、結果は得られませんでした。
私は非常に初心者レベルであるため、最も簡単な例を挙げて誰かが助けることができますか. View での Phone Iteration のないコード

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.ContactID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.LastName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Company)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.PhoneType)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.PhoneNumber)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
        @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
        @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
    </td>
</tr>
4

1 に答える 1

0

リポジトリ クラスからイテレーションを削除し、電話番号用に別のクラスを作成し、以下のモデルのように ContactVM2 にそのクラスの変数を追加する必要があります。

public class ContactVM2
{
    public int ContactID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Company { get; set; }
    public List<ContactVM2Phone> PhoneList {get; set;}

}
public class ContactVM2Phone
{
    public string PhoneType { get; set; }
    public string PhoneNumber { get; set; }
}

リポジトリ クラス

public class ContactRepository
{
    ContactsDBEntities dbRepo = new ContactsDBEntities();

    public List<ContactVM> GetAllContacts()
    {
        List<ContactVM> ContactViewList = new List<ContactVM>();


        var allContacts = dbRepo.Contacts.ToList();
        var allPhones = dbRepo.Phones.ToList();

        foreach (var cont in allContacts)
        {
          ContactViewList obj=   new ContactVM()
           obj.ContactID =cont.ContactID;
           obj.FirstName=cont.FirstName;
           obj.LastName=cont.LastName;
           obj.Company=cont.Company;
           List<ContactVM2Phone> Phonelist= new List<ContactVM2Phone>();
            foreach (var ph in allPhones)
            {
                if (cont.ContactID == ph.ContactID)
                {
                    Phonelist.Add(new ContactVM2Phone(){
                        PhoneType=ph.PhoneType,
                        PhoneNumber=ph.PhoneNumber});
                }
            }
           obj.PhoneList =Phonelist;
           ContactViewList.Add(obj);
        }

        return ContactViewList;
    }        
}
于 2013-07-31T13:22:02.370 に答える