2014-01-27 64 views
0
results = results.Where(x => x.SomeValue ?? 0 == 0); 

我想檢查一個值是否爲null,如果爲null,則使其爲零,然後進行比較。??在LINQ中的運算符

我不知道如何把額外的括號()

錯誤消息:

+4

只需放入比您需要的更多圓括號,並將它們刪除直到停止工作。簡單到足以測試。 – Servy

+0

如果null-coalescing導致你這麼多問題,爲什麼不檢查null? '(x => x == null || x == 0)'?我認爲意圖更清楚。 –

回答

7
results = results.Where(x => (x.SomeValue ?? 0) == 0); 

但我發現更可讀的明確檢查空,如果你處理可空類型:

results = results.Where(x => !x.SomeValue.HasValue || x.SomeValue == 0); 

另一種選擇是GetValueOrDefault()方法,它將返回零[R整數(長字節):

results = results.Where(x => x.SomeValue.GetValueOrDefault() == 0); 
3

嘗試......

results = results.Where(x => (x.SomeValue ?? 0) == 0); 
1

假設x.SomeValue是一個可空INT,你可以這樣做:

results = results.Where(x => (x.SomeValue ?? 0) == 0); 

但你只能用相同類型的值「替換」空值,所以如果它是一個字符串或別的東西,這是行不通的。

你可以用內聯,如果運營商以及這樣做:

results = results.Where(x => x.SomeValue == null ? true : x.SomeValue == 0) 
+0

儘管當然,正如Sergey所說,可讀性是關鍵。這些都不像明確的比較那樣可讀。 –

1

你需要一個可空int類型爲這個(INT?)。

results = results.Where(x => (x.SomeValue ?? 0) == 0); 
+0

謝謝我不知道把括號放在哪裏:D –