[英]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.