当不需要外键但仍需要获取所有记录时如何从两个连接表创建列表
How to create list from two joined tables when foreign key is not required but still need to get all records
我有一个简单的数据库结构。导航 属性 到所有者 class,当我尝试使用所有者添加的所有者名称创建传输列表时遇到问题,因为不需要传输中的所有者 ID...
public Transport()
{
[Key]
public int TransportID { get; set; }
public string PlateNo { get; set; }
public string Brand { get; set; }
public string OwnerID { get; set; }
[ForeignKey("OwnerID")]
public virtual Owner Owner { get; set;}
[NotMapped]
public string OwnerName { get; set; }
}
public partial class Owner
{
[Key]
public string OwnerID { get; set; }
public string OwnerName { get; set; }
}
var result = (from n in Transports select new Transport()
{TransportID=n.TransportID,
OwnerID = n.OwnerID,
OwnerName = n.Owner.OwnerID
}).ToList();
在执行查询时我得到 System.NullReferenceException: "Object reference not set to an instance of an object."
如果它没有所有者,我需要一个传输列表事件...
var result = (from n in Transports.Include("Owner") select new Transport()
{TransportID=n.TransportID,
OwnerID = i.OwnerID,
OwnerName = i.Owner.OwnerID
}).ToList();
您必须检查 Owner 在您的查询中是否为空。
修改你的行:
OwnerName = n.Owner.OwnerID
对此:
OwnerName = n.Owner == null ? "" : n.Owner.OwnerID
var result = (from n in transports
select new Transport()
{
TransportID = n.TransportID,
OwnerID = n.OwnerID,
OwnerName = n.Owner?.OwnerName
}).ToList();
使用 Null 条件运算符将有助于避免 NRE。
我有一个简单的数据库结构。导航 属性 到所有者 class,当我尝试使用所有者添加的所有者名称创建传输列表时遇到问题,因为不需要传输中的所有者 ID...
public Transport()
{
[Key]
public int TransportID { get; set; }
public string PlateNo { get; set; }
public string Brand { get; set; }
public string OwnerID { get; set; }
[ForeignKey("OwnerID")]
public virtual Owner Owner { get; set;}
[NotMapped]
public string OwnerName { get; set; }
}
public partial class Owner
{
[Key]
public string OwnerID { get; set; }
public string OwnerName { get; set; }
}
var result = (from n in Transports select new Transport()
{TransportID=n.TransportID,
OwnerID = n.OwnerID,
OwnerName = n.Owner.OwnerID
}).ToList();
在执行查询时我得到 System.NullReferenceException: "Object reference not set to an instance of an object." 如果它没有所有者,我需要一个传输列表事件...
var result = (from n in Transports.Include("Owner") select new Transport()
{TransportID=n.TransportID,
OwnerID = i.OwnerID,
OwnerName = i.Owner.OwnerID
}).ToList();
您必须检查 Owner 在您的查询中是否为空。
修改你的行:
OwnerName = n.Owner.OwnerID
对此:
OwnerName = n.Owner == null ? "" : n.Owner.OwnerID
var result = (from n in transports
select new Transport()
{
TransportID = n.TransportID,
OwnerID = n.OwnerID,
OwnerName = n.Owner?.OwnerName
}).ToList();
使用 Null 条件运算符将有助于避免 NRE。