2014-01-22 45 views
4

這是我如何得到我的總和我可以在LINQ中使用後置條件語句嗎?

double? myVar = myList.Sum(x => x.MyItem); 

是,有可能以零取代myVar的,如果在同一條線上.SUM()返回0?

我不想使用

if(myVar == 0) myVar = null; 

LINQ是否有一個post-條件語句?

+2

「MyItem」的類型是什麼?請注意,您的「我不想使用」似乎反過來 - 從空到0,而不是0到空。 –

+0

@JonSkeet這是一個'雙?'我編輯了這個問題! – Alex

+0

那麼if語句有什麼問題呢? – decPL

回答

5

這聽起來像你想要空合併運算符的反轉,並且LINQ或C#語言中沒有任何東西可以爲你做。你可以創建自己的擴展方法來做到這一點,如果你雖然想:

public T? NullIfDefault<T>(this T? value) where T : struct 
{ 
    if (value == null) 
    { 
     return value; 
    } 
    return EqualityComparer<T>.Default.Equals(default(T), value.Value) 
     ? null : value; 
} 

然後:

double? myVar = myList.Sum(x => x.MyItem).NullIfDefault(); 

(有使用Nullable<T>.GetValueOrDefault()如何代碼NullIfDefault,如各種其它選項 - 你可能想以玩弄最喜歡的形式。)

+0

非常感謝您的解釋。 – Alex

相關問題