6

私はlinqtosqlで左結合を行っているので、正しいテーブルフィールドを選択しているときに、結合されたオブジェクトが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.....errorDefaultIfEmpty()ここでそれは正確には何ですか?

4

2 に答える 2

3

あなたがしたことは正しいです。

msdnから、 DefaultIfEmpty は次を返します。

source が空の場合、TSource 型の既定値を含む IEnumerable<T> オブジェクト。それ以外の場合は、ソース。

つまり、コレクションが空の場合、T の既定値が返されます。参照型の既定値は null です。これが、DeptName を選択するときに null を確認する必要がある理由です。

于 2012-06-14T12:26:50.580 に答える
0

この場合の DefaultIfEmpty は、評価の左側に null オブジェクトを提供します。したがって、ujoinx.employeeSal を呼び出そうとすると、ujoinx が null であるため、オブジェクト参照セットが返されません。

于 2012-06-14T12:22:10.243 に答える