2017-05-03 44 views
0

我名單上的工作得到應用過濾器像下面當計數空列表使用LINQ

ValueRaw = pCounts.Count() > 0 ? pCounts.SingleOrDefault(x => x.IsNew)?.Count : 0 

上面一行返回nullpCounts.SingleOrDefault(x => x.IsNew)是空

怎麼辦後計算應用於返回0我改變它返回0而不是null

+1

您可以使用[null-coalescing操作符](https://msdn.microsoft.com/en-gb/library/ms173224.aspx) – Sandman

+2

爲什麼你根本檢查'.Count()'?如果它是0,那麼'.SingleOrDefault'將會返回默認值嗎?你的整個表情可能是這樣的? 'pCounts.SingleOrDefault(x => x.IsNew)?。Count? 0' –

回答

5

你可以像下面這樣做(你不需要你的第一次檢查):

ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count ?? 0; 

這使用空煤炭操作員(參見here)。如果它不爲空,則它取值爲左邊的值,否則爲值。

但是,你當然可以仍與條件標誌寫:

var temp = pCounts.SingleOrDefault(x => x.IsNew)?.Count; 
ValueRaw = temp == null ? 0 : temp; 

甚至更​​長的時間與if:

var temp = pCounts.SingleOrDefault(x => x.IsNew)?.Count; 
if(temp == null) 
    ValueRaw = 0; 
else 
    ValueRaw = temp; 
+0

第一選擇是好的。謝謝! – DoIt

+1

它可以簡化爲pCounts.SingleOrDefault(x => x.IsNew)?。Count? 0 –

+1

@AlexandruPupsa編輯我的答案。 – MetaColon

3

首先,Count()檢查是沒有必要的。當收集爲空時,SingleOrDefault將返回默認值(null)。所以,你的原始表達式可以簡化爲:

ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count; 

如果你想ValueRaw0當沒有元素滿足條件,則可以使用空合併運算符:

ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count ?? 0; 

這會給你滿足條件的第一個元素的Count,或者如果不存在這樣的元素,則爲0。特別是,你的收藏中的元素本身必須是收藏品(否則你不能套用Count)。也許你確實要使用Where

ValueRaw = pCounts.Where(x => x.IsNew).Count(); 

這會給你滿足條件的元素數量。