2012-09-13 25 views
18

Tôi có truy vấn sau đây:LINQ Max phương pháp khuyến nông cho một lỗi trên bộ sưu tập trống

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a.Sample_Num); 

Nếu không có Id 9, tôi nhận được một lỗi. Tôi thích để mặc định kết quả là 0 nếu không có Id của 9.

tôi đã cố gắng:

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a.Sample_Num) ?? 0; 

cũng như các biến thể khác nhưng đã không thể làm cho nó hoạt

+0

Tôi không thể thấy bất kỳ GroupBy nào trong mã ở trên ... :) –

Trả lời

62

Bạn có thể sử dụng Any để kiểm tra nếu có một yếu tố phù hợp:

int maxNumber = 0; 
var id9 = dbContext.Where(a => a.Id == 9); 
if(id9.Any()) 
{ 
    maxNumber = id9.Max(a => a.Sample_Num); 
} 

hoặc bạn có thể sử dụng DefaultIfEmpty(defaultValue):

012.
int maxNumber = dbContext 
    .Where(a => a.Id == 9) 
    .Select(a => a.Sample_Num) 
    .DefaultIfEmpty(0) 
    .Max(); 
+24

+1 để sử dụng thông minh 'DefaultIfEmpty' –

+3

Đồng ý. Tôi ghét sử dụng 'Any()' bởi vì nó buộc liệt kê lần thứ hai. – Paul

+0

^1 Tim không chỉ thông minh mà còn đẹp trai. –

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