2012-06-14 35 views
6

Tôi là doin trái tham gia trong linq để sql, vì vậy câu hỏi của tôi là trong khi lựa chọn các lĩnh vực bảng bên phải, tôi đang kiểm tra từng lĩnh vực wheather đối tượng tham gia là null hay không, đây có phải là cách chính xác không? hoặc có cách nào khác để làm điều đó không? truy vấn của tôi cũng giống nhưlinq để sql trái tham gia, cần phải kiểm tra null cho bảng bên phải

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 ? 
} 

Các kết quả truy vấn câu trả lời đúng nhưng nếu tôi không kiểm tra những lĩnh vực ít for null ném nó object reference not set.....error. Đây là gì DefaultIfEmpty() doin chính xác?

Trả lời

3

Điều bạn đã làm là chính xác.

Từ msdn, DefaultIfEmpty trả:

Một IEnumerable <T> đối tượng có chứa các giá trị mặc định cho các loại TSource nếu nguồn là trống rỗng; ngược lại, nguồn.

Nói cách khác, khi bộ sưu tập trống, giá trị mặc định cho giá trị mặc định là NULL.

+0

cảm ơn bạn, thực sự tôi có một số lượng khá lớn các trường, cho mỗi trường phải kiểm tra cảm giác trống rỗng của chương trình dơ bẩn, vì vậy nghĩ có cách nào khác để làm điều đó .. – Meson

0

Mặc địnhIfEmpty trong trường hợp này cung cấp cho bạn một đối tượng null ở phía bên trái của sự phát tán. Vì vậy, cố gắng gọi ujoinx.employeeSal sẽ trả về tham chiếu đối tượng không được thiết lập vì ujoinx là null.

Các vấn đề liên quan