我有以下具有相同变量的类,但其中一个是可空的,另一个不是因为它是该表中的主键:
[DataServiceKey("OrderID")]
public class Order
{
public int OrderID { get; set; }
public int? EmployeeID { get; set; }
// ...other properties...
// ...
public Employee Employees { get; set; }
}
[DataServiceKey("EmployeeID")]
public class Employee
{
public int EmployeeID { get; set; }
// ...other properties...
// ...
public IEnumerable<Order> Orders { get; set; }
}
这两个类之间的一般想法是订单可以属于1个员工,但可能还存在未分配给任何员工的订单,员工必须至少有1个订单或者超过1个。现在我我正试图在Order
班级和Employee
班级之间建立联系,这就是我的做法:
// Create an association between Orders and Employees
var _es = _Employees.ToDictionary(e => e.EmployeeID);
var _os = _Orders.ToLookup(o => o.EmployeeID);
foreach (var o in _Orders) o.Employees = _es[o.EmployeeID];
foreach (var e in _Employees) e.Orders = _os[e.EmployeeID];
我在cannot convert from "int?" to "int"
中遇到_es[o.EmployeeID]
错误,我已经尝试了here中提供的所有解决方案,但这些解决方案都不适用于我......我也试过使用{{ 1}},它确实解决了错误,但这次它在我运行它时会给我_es[o.EmployeeID.Value]
错误。是否有任何可能的解决方案适用于我的问题?
答案 0 :(得分:3)
您将int?
的密钥传递给需要int
的字典。
o.Employee
是int?
。
es
是Dictionary<int, Employee>
。
你可能想要:
o.Employees = o.EmployeeID != null ? _es[o.EmployeeID] : null;
答案 1 :(得分:1)
在分配值之前检查HasValue
。
foreach (var o in _Orders)
{
if (_es[o.EmployeeID].HasValue)
{
o.Employees = _es[o.EmployeeID];
}
}
或
foreach (var o in _Orders) o.Employees = _es[o.EmployeeID].HasValue ? _es[o.EmployeeID] : null;