2016-09-09 9 views
3

나는 같은 변수가 다음과 같은 클래스를 가지고 있지만, 그 중 하나는 해당 테이블의 기본 키이기 때문에 다른 하나가 아닌, 널 (NULL) 입력 :같은 변수를 다른 클래스의 이름 그러나 사람은 널 (NULL)

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

내가 _es[o.EmployeeID]cannot convert from "int?" to "int" 오류가 발생했습니다, 나는 here에서 제공하는 모든 솔루션을 시도했지만, 그들 중 누구도 나를 위해 작동하지 않습니다 ... 나는 또한 _es[o.EmployeeID.Value]를 사용하는 것을 시도했다, 그것은 오류 이번에 그것을 해결하지 나를 실행할 때 System.InvalidOperationException 오류가 발생합니다. 가능한 해결책이 내 문제에 적용됩니까?

+2

는이'foreach는 (_Orders에 var에 O) o.Employees = _es [o.EmployeeID]처럼 시도 할 수 있습니다? Default (int);' – Webruster

답변

3

당신은 int이 필요한 사전에 키에 대한 int?을 전달하고 있습니다.

o.Employeeint?입니다.

esDictionary<int, Employee>입니다.

당신은 아마 원하는 :

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

'null'을 체크하는 대신'HasValue'를 사용하여 값이 있는지 확인하십시오. –

+0

@BalagurunathanMarimuthu는 null을 확인하는 것이 C#에서 가장 관용적 인 방법입니다. 그것은 HasValue에 대한 구문 설탕입니다 - 두 가지는 동일합니다. –

+0

네, 그렇습니다. 그러나'Nullable' 변수에는 변수에 값 또는 null이 있는지 확인하는 미리 정의 된 속성이 있습니다. –

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;