簡體   English   中英

asp.net mvc 5從不同的表中獲取相關數據

[英]asp.net mvc 5 get related data from different tables

我試圖根據某些要求從不同的表中獲取特定數據,該程序應該從表中選擇一些列:Contatti,Contacts和Company,它們位於不同的位置並將它們組合在一起。

聯系人通過CompanyID連接到公司

我要顯示的是基於Contact表中CompanyID字段的公司名稱。 問題是我遍歷列表以獲取視圖中的數據,因此我似乎無法基於公司ID屬性(即公司表的聯系外鍵)獲得公司名稱, get是所有公司名稱,因為它們在同一列表中。

我敢肯定有一個簡單的方法可以做到這一點,但這對我來說是一個新世界,謝謝您的幫助。

接觸型號:

public class Contact
{
[Key]
public int ContactId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[ForeignKey("Companies")]
public int CompanyId { get; set; }
public virtual ICollection<Companies> Companies { get; set; }
[Required]
//public virtual Contatti Contatti { get; set; }
public virtual ICollection<Contatti> Contatti { get; set; }
}

公司型號:

public class Companies
{
[Key]
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public string CompanyAddress { get; set; }
public string CompanyCity { get; set; }
public string CompanyState { get; set; }
public string CompanyZip { get; set; }
public string CompanyArea { get; set; }
}

控制器:

public ActionResult Index(String Page)
    {

        ContactsUni2 CU = new ContactsUni2();
        CU.Contattis = db2.Contatti.ToList();
        CU.Contacts = db.Contacts.ToList();
        CU.Companies = db.Companies.ToList();
        List<ContactsUni2> contactlist = new List<ContactsUni2>();
        contactlist.Add(CU);
        return View(contactlist);
    }

視圖:

    @foreach (var item in Model)
    {
        for (int i = 0; i < item.Contacts.Count; i++)
        {
            <tr>
                <td>
                    @item.Contacts[i].ContactId
                </td>
                <td>
                    @item.Contacts[i].Name
                </td>
                <td>
                    @item.Contacts[i].Address
                </td>
                <td>
                    @item.Contacts[i].CompanyId
                </td>
                    @if (@item.Contacts[i].CompanyId == item.Companies[i].CompanyId)
                        {
                    <td>
                        @item.Companies[i].CompanyName
                    </td>
                    <td>
                        @item.Companies[i].CompanyCity
                    </td>
                    <td>
                        @item.Companies[i].CompanyArea
                    </td>
                        }
                    }
                </tr>
                <tr>
                    <td>
                        @item.Contattis[i].ContattoID
                    </td>
                    <td>
                        @item.Contattis[i].Nome
                    </td>
                    <td>
                        @item.Contattis[i].Citta
                    </td>
                    <td>
                        @item.Contattis[i].CodicePostale
                    </td>
                    <td>
                        @item.Contattis[i].Email
                    </td>
            </tr>


        }
    }

</table>

</body>
</html>

您可以嘗試為每個聯系人填充公司集合,然后修復視圖以直接訪問其自己的成員,而不是在“公司”列表中查找它。

public ActionResult Index(String Page)
{

    ContactsUni2 CU = new ContactsUni2();
    CU.Contattis = db2.Contatti.ToList();
    CU.Contacts = db.Contacts.ToList();
    CU.Companies = db.Companies.ToList();

    foreach(var contact in CU.Contacts)
    {
        contact.Companies = CU.Companies
                          .Where(com => com.CompanyId == contact.CompanyId)
                          .ToList();
    }

    List<ContactsUni2> contactlist = new List<ContactsUni2>();
    contactlist.Add(CU);
    return View(contactlist);
}

在視圖中,您可以替換:

@if (@item.Contacts[i].CompanyId == item.Companies[i].CompanyId)
{
  <td>
   @item.Companies[i].CompanyName
 </td>
 <td>
   @item.Companies[i].CompanyCity
 </td>
 <td>
   @item.Companies[i].CompanyArea
 </td>
}

帶有以下內容:( 注意,if語句已刪除)

<td>
   @item.Contacts[i].Companies[0].CompanyName
</td>
<td>
   @item.Contacts[i].Companies[0].CompanyCity
</td>
<td>
   @item.Contacts[i].Companies[0].CompanyArea
</td>

編輯:由於ICollection不支持索引,公司集合應從

public virtual ICollection<Companies> Companies { get; set; }

public virtual IList<Companies> Companies { get; set; }

或任何其他類型的集合支持索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM