2012-09-13 40 views
18

我有以下查詢:LINQ最大擴展方法給出了空集的錯誤

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

如果沒有9身份證,我得到一個錯誤。我喜歡默認的結果爲0,如果沒有的9

標識我想:

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

以及其他的變化,但無法得到它的工作

+0

我在上面的代碼中看不到任何GroupBy ... :) –

回答

62

你可以使用Any檢查是否有一個匹配的元素:

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

或者你可以使用DefaultIfEmpty(defaultValue)

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

用於巧妙使用'DefaultIfEmpty'的同意+1。 –

+3

同意。我討厭使用'Any()',因爲它強制枚舉第二次。 – Paul

+0

^1蒂姆不僅聰明而且英俊。 –