我怎樣寫是這樣的:LINQ的結果,如果空接零
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count)) ?? 0;
凡將返回總和值,除非LINQ未發現任何在這種情況下,它會返回0
編輯:該字段不可爲空。
編輯2:我正在使用實體框架。
我怎樣寫是這樣的:LINQ的結果,如果空接零
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count)) ?? 0;
凡將返回總和值,除非LINQ未發現任何在這種情況下,它會返回0
編輯:該字段不可爲空。
編輯2:我正在使用實體框架。
這應該只是罰款:
var result = database.Where(x => x.Name == "Criteria").Sum(x => x.Count));
如果沒有元素被Where
函數返回然後Sum
函數將返回0。
所有返回的IEnumerable<T>
將返回LINQ的功能空集合而不是null
。
這應該工作正常(無需?? 0):
var result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count))
除非你想檢查是否X本身爲空或不是:
var result = database
.Where(x => x != null)
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count))
你可以這樣寫:
int result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count));
Enumerable.Sum
方法在沒有結果時已經返回零。從documentation:
如果源不包含任何元素,則返回零。
我認爲這隻適用於IEnumerable版本而非IQueriable。 IQueriable版本返回null,並解決'?? 0'的作品。 – NER1808
使用聚合擴展方法,其中0是一個種子值
int sum = database.Where(x=>x.Name == "Criteria")
.Aggregate(0, (total, next) => total +=next);
我這麼做是一種方式,沒有人會喜歡,但garrantee工作時間的100%,看哪!
int result = 0;
try{
result = database
.Where(x => x.Name == "Criteria")
.Sum(x => x.Count));
} catch (Exception e){ }
可能有更好的方法,但是你總是可以在查詢中添加'。FirstOrDefault()'。 – Tim
FirstOrDefault不對已經聚合爲int的linq語句進行操作。 – Bill
「如果源不包含任何元素,則此方法返回零。」 –