2012-06-14 15 views
6

私はdoin 'SQLにlinqで参加していますので、私の質問は右のテーブルフィールドを選択している間、私は各フィールドwheather結合オブジェクトこれは正しい方法ですか?それを行う他の方法がありますか?私のクエリはlinq to sql left join、右テーブルのnullをチェックする必要があります

from u in user 
join x in employeee on u.id equals x.userId 
     into ux from ujoinx in ux.DefaultIfEmpty() 
join y in department on x.id equals y.employeeId 
     into xy from xjoiny in xy.DefaultIfEmpty() 
select new { 
    EmployeeSal = ujoinx!=null?ujoinx.employeeSal:0, // see checkig for null 
    EmployeeTax = ujoinx!=null?ujoinx.employeeTax:0, // in this 3 lines 
    UserName = u.username, 
    DeptName = xjoiny!=null?xjoiny.name:""   //is this a correct way ? 
} 

のような適切な答えを結果のクエリですが、私がnull そのはobject reference not set.....errorを投げるためにそれらのいくつかのフィールドを確認してくださいいけない場合。 ここに何がありますか?DefaultIfEmpty() doin正確に??

答えて

3

あなたのしたことは正しいです。 msdnから

は、DefaultIfEmptyを返す:

アンIEnumerableを< T源が空である場合 TSOURCEタイプのデフォルト値を含む>オブジェクト。そうでなければ、source。

つまり、コレクションが空の場合、Tのデフォルト値が返されます。参照型のデフォルト値はnullです。このため、DeptNameを選択するとnullをチェックする必要があります。

+0

ありがとう、実際に私はフィールドのかなりの数を持っているので、それぞれのフィールドがヌルimはちょっと汚いプログラミングを感じるためにチェックする必要があるので、それを行うための他の方法があります.. – Meson

0

この場合のDefaultIfEmptyは、エバリュエーションの左側にヌルオブジェクトを表示します。したがって、ujoinx.employeeSalを呼び出そうとすると、ujoinxがnullであるためオブジェクト参照が設定されません。

関連する問題