我有兩個相關的表格,如下所示:
用戶:
public partial class Users
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Users()
{
}
public int ID { get; set; }
public int UserType_ID { get; set; }
public string Email { get; set; }
public virtual UserTypes UserTypes { get; set; }
}
用戶型別:
public partial class UserTypes
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public UserTypes()
{
this.Users = new HashSet<Users>();
}
public int ID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Users> Users { get; set; }
}
對于 UserType 的訪問名稱,我將此 linq 寫入物體:
string[] UserTypes = new string[1];
using (Crypto_Entities entities = new Crypto_Entities())
{
int User_ID_Integer = int.Parse(User_ID.Trim());
var user = (from User in entities.Users
//join UserType in entities.UserTypes on User.UserType_ID equals UserType.ID
where User.ID == User_ID_Integer
select User).FirstOrDefault();
if (user != null)
{
UserTypes[0] = user.UserTypes.Name;
}
}
我的問題是為什么user.Name不適合我的目的,joinlinq to entity 有什么好處?
如果我像在查詢中那樣洗掉join,我仍然可以看到 UserType 的 Name 欄位user.UserTypes.Name。
uj5u.com熱心網友回復:
如果您已正確定義導航屬性,則不需要加入。如果您只需要Name,請不要檢索完整物體。
string[] UserTypes = new string[1];
using (Crypto_Entities entities = new Crypto_Entities())
{
int User_ID_Integer = int.Parse(User_ID.Trim());
var query =
from User in entities.Users
where User.ID == User_ID_Integer
select User.UserTypes.Name;
var name = query.FirstOrDefault();
if (name != null)
{
UserTypes[0] = name;
}
}
如果在查詢中使用導航屬性,EF 會自動生成所有需要的連接。但是,如果您只選擇整個物體而不定義Include- EF 將不會加載相關資料。這是有道理的,否則如果有很多關系,您可能會加載幾乎整個資料庫。
uj5u.com熱心網友回復:
由于您已經在物體中設定了關系,因此您無需手動撰寫 join 來加載相關資料:
var user = entities.Users
.Include(u => u.UserTypes)
.Where(u => u.ID == User_ID_Integer)
.FirstOrDefault();
至于您的連接無用 - EF Core 將代碼轉換為實際 SQL(您可以檢查),并且由于您沒有從連接表中選擇任何資料 - 它與您選擇欄位的 SQL 查詢中一樣無用僅來自一張連接結果表。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411174.html
標籤:
上一篇:在C#中組合2個串列的內容
