不同类中的变量名相同,但一个可以为空

时间:2016-09-09 04:55:56

标签: c# .net entity-framework linq nullable

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

[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]错误。是否有任何可能的解决方案适用于我的问题?

2 个答案:

答案 0 :(得分:3)

您将int?的密钥传递给需要int的字典。

o.Employeeint?

esDictionary<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;