2016-09-09 7 views
3

である私は、同じ変数を持っている以下のクラスを持っているが、そのうちの一つは、それがそのテーブルの主キーであるため、他の1ではない、NULL可能である:異なるクラスで同じ変数名が、1つは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; } 
} 

これらの2クラス間の一般的な考え方は、オーダー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"エラーを得た私も_es[o.EmployeeID.Value]を使用しようとしました、私はhereで提供すべてのソリューションを試してみましたが、それらのどれも私のための仕事ではない...、それはエラーを解決しないが、この時、それ私はそれを実行するとSystem.InvalidOperationExceptionエラーが発生します。可能な解決策が私の問題に適用されるでしょうか?

+2

あなたは[o.EmployeeID]この 'foreachの(_Orders中のvar O)o.Employees = _esのように試みることができます? Default(int); ' – Webruster

答えて

3

あなたはintが必要とされている辞書のキーのint?を渡しています。

o.Employeeは、int?です。

esは、Dictionary<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; 
関連する問題