不同 class 中的相同变量名称,但其中一个可为空

Same variable name in different class but one is nullable

我有以下具有相同变量的 classes,但其中一个可以为空,另一个不能为空,因为它是 table 中的主键:

[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; }
}

这2个class的大致思路是一个订单可以属于1个员工,但也可能存在一个订单还没有分配给任何员工,一个员工必须至少有1个订单或超过 1。现在我正在尝试在 Order class 和 Employee class 之间创建关联,我就是这样做的:

        // 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];

我在 _es[o.EmployeeID] 中遇到 cannot convert from "int?" to "int" 错误,我已经尝试了 here 中提供的所有解决方案,但其中 none 对我有用...我有还尝试使用 _es[o.EmployeeID.Value],它确实解决了错误,但这次当我 运行 它时它给了我 System.InvalidOperationException 错误。是否有任何可能的解决方案适用于我的问题?

赋值前检查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;

您正在将 int? 作为键传递给需要 int 的字典。

o.Employee 是一个 int?.

esDictionary<int, Employee>.

你可能想要:

o.Employees = o.EmployeeID != null ? _es[o.EmployeeID] : null;