2010-11-09 24 views
12

Tôi có truy vấn LINQ này:thế nào để biết nếu truy vấn LINQ của tôi trả về null

và khi tôi cố gắng để làm điều này: listView.ItemsSource = myQuery

đôi khi nó ném một ngoại lệ vì có không có yếu tố nào trong myQuery

Tôi đã thử nhiều cách như: if(myQuery.count!=0) hoặc if(myQuery.Any()) nhưng không có gì hiệu quả, vì vậy làm cách nào để xác định xem truy vấn của tôi có trả về không?

+0

Ý anh là gì bởi "không có gì làm việc"? Bạn đã gặp lỗi gì? Bạn có thể đăng mã bạn đã thử không? –

+0

@Guffa đã nói ngay rằng bạn đã bỏ lỡ một cái tên bảng. – PrateekSaluja

Trả lời

15

Bạn có thể nhận ra kết quả như một danh sách:

var myQuery = (from Q in myDataContext select Q.Name).ToList(); 

Bây giờ bạn có thể kiểm tra số lượng các mục:

if (myQuery.Count > 0) ... 

Bạn cũng có thể sử dụng phương pháp Count() trên truy vấn ban đầu, nhưng sau đó bạn sẽ chạy truy vấn hai lần, một lần để đếm các mục và một lần để sử dụng chúng.

+0

đây là mã chính xác của tôi – Mouayad

+0

var myAppointmentsQuery = từ MyApp trong DC.Appointments nơi (myApp.Appointment_Date == datePicker_showAppointmentDate.SelectedDate && myApp.Doctor.Name == comboBox_showAppointmentsDoctor.SelectedItem.ToString()) chọn mới {myApp.Patient .Name, myApp.Appointment_Time}; nếu (myAppointmentsQuery.Count()! = 0) { listView_appointmentsList.ItemsSource = myAppointmentsQuery; } – Mouayad

+0

@Mouayad: Điều đó sẽ hoạt động. Tuy nhiên, bạn nên lấy đầu vào từ các trường giao diện người dùng và xác nhận chúng trước khi sử dụng chúng trong truy vấn. Dữ liệu nhập không hợp lệ là nguyên nhân có khả năng nhất khiến mã đôi khi bị lỗi. – Guffa

4

Truy vấn LINQ sẽ không bao giờ trả về giá trị rỗng và bạn không nên nhận ngoại lệ nếu kết quả trống. Có thể bạn đã gặp lỗi trong mã của mình.

Có vẻ như mã bạn đã đăng bị thiếu tên bảng. Bạn có chắc chắn rằng mã bạn đã đăng là mã cung cấp cho bạn sự cố không?

+1

tôi nghĩ rằng anh ta mô tả một trường hợp kết quả là 0 hồ sơ sau đó gọi một ToList () trên truy vấn đó sẽ ném một ngoại lệ. –

+0

@eranotzer: Tại sao gọi ToList là ném ngoại lệ? Tôi khá chắc chắn rằng nó sẽ chỉ trả về một danh sách với các yếu tố không. –

+0

tôi cần phải kiểm tra này ra một lần nữa, nhưng tôi nhớ một trường hợp tương tự đã xảy ra với tôi khi gọi chung ToList () trên 0 kết quả đã ném một ngoại lệ. tôi sẽ liên hệ lại với bạn về vấn đề này. –

0

bạn có thể thử này

var myQuery = from Q in myDataContext 
if(myQuery != null) 
{ 
    // TO SOME THING HERE 
} 

hoặc u bổ sung có thể kiểm tra như thế nào nếu có danh sách trong kết quả

var myQuery = from Q in myDataContext 
if(myQuery != null && myQuery.Count > 0 ) 
{ 
    // TO SOME THING HERE 
} 
2

Hoặc bạn có thể chuyển đổi nó để liệt kê và sau đó kiểm tra đếm

var result = (from Q in myDataContext select Q.Name).ToList(); 
if(result.Count > 0) 
{ 
// Perform some operation 
} 

hoặc bạn có thể thực hiện kiểm tra trống theo mặc định truy vấn LINQ trả về null thay vì danh sách trống.

var result = (from Q in myDataContext select Q.Name); 
if(result != null) 
{ 
// Perform some operation 
} 
0

cách tiếp cận tốt nhất là để kiểm tra có null (có mặt hàng) trong danh sách sử dụng Any() thay vì count()

var myQuery = (từ Q trong myDataContext chọn Q.Name) ToList (); Bây giờ bạn có thể kiểm tra số lượng các mục:

if (myQuery.Any()) ...

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