不同 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?
.
es
是 Dictionary<int, Employee>
.
你可能想要:
o.Employees = o.EmployeeID != null ? _es[o.EmployeeID] : null;
我有以下具有相同变量的 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?
.
es
是 Dictionary<int, Employee>
.
你可能想要:
o.Employees = o.EmployeeID != null ? _es[o.EmployeeID] : null;