我正在嘗試使用以下物件、物體框架和 LINQ 從資料庫中填充本地辦公室聯系人姓名串列的組合框。它不回傳任何結果。任何人都可以幫忙嗎?課程看起來像這樣。
public class OfficeContact
{
[Key]
public int OfficeContactId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
public class Office
{
[Key]
public int OfficeId { get; set; }
public string Region { get; set; }
public string Address { get; set; }
public string City { get; set; }
[Display(Name = "OfficeContact")]
public virtual int OfficeContactId { get; set; }
[ForeignKey("OfficeContactId")]
public virtual OfficeContact OfficeContacts { get; set; }
}
LINQ 看起來像這樣。
private void cbAddress_SelectionChangeCommitted(object sender, EventArgs e)
{
var localContact = from office in context.Offices.ToList()
where office.OfficeContacts.Equals(office.OfficeContactId)
select Name;
cbLocalOfficeContactName.DataSource = localContact.ToList();
}
uj5u.com熱心網友回復:
首先,洗掉.ToList()from in context.Offices。A ToList()here 將導致 EF在應用該子句之前從 DB加載所有辦公室Where。
接下來,以下 Where 子句沒有任何意義:
where office.OfficeContacts.Equals(office.OfficeContactId)
這更像是一個Join條款,而不是一個Where條件。當使用導航屬性設定 EF 時,相關物體之間的連接完全在幕后處理。
如果您想為每個辦公室選擇辦公室聯系人姓名,您只需Select選擇相關物體的姓名即可。然后您可以在加載之前獲取資料ToList():
var localContacts = (from office in context.Offices
select office.OfficeContacts.Name).ToList();
Where 子句是您只需要來自符合條件的特定辦公室的聯系人的地方。例如,如果您只需要特定地區辦公室的聯系人姓名:
var localContacts = (from office in context.Offices
where office.Region = localRegion
select office.OfficeContacts.Name).ToList();
哪里localRegion是傳入或計算出的值以限制您的辦公室選擇。
從那里你可以在這里放置一個斷點,讓它執行,然后看看你是否得到任何 localContacts。如果您沒有看到任何資料,那么最常見的罪魁禍首是在運行時 DbContext 使用的連接字串與您預期的不同,并且它沒有您希望它找到的資料。仔細檢查 web.config 或 .exe.config 檔案中的連接字串。此問題的常見原因是將 DbContext 和物體移動到不同的程式集并更新 DLL 的 app.config 中的連接字串,但它并未反映仍在主應用程式配置中的設定。
uj5u.com熱心網友回復:
試試這個
var localContacts = context.Offices
.Select(o=>o.OfficeContacts.Name)
.ToList();
cbLocalOfficeContactName.DataSource = localContacts;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/385749.html
