的優勢使用C#6(.NET 4.6或更高版本),您可以使用新的Elvis Operator。與Null合併運算符一起使用。
var students = db.students.Where(c => c.Grades.LastOrDefault()?.Grade != 10 ?? false).ToList();
基本上Elvis操作符將返回null,如果LastOrDefault()爲空,否則它將返回甲級
其他兩個可能的方法的價值: 檢查是否有c.Grades任何值或檢查LastOrDefault()是否返回null。 方法1:
var students = db.students.Where(c => c.Grades.LastOrDefault() == null ? false : c.Grades.LastOrDefault().Grade != 10).ToList();
方式2:
var students = db.students.Where(c => c.Grades.Any() && c.Grades.LastOrDefault().Grade != 10).ToList();
在所有3種方式對學生的結果是,每一個學生都有至少1級,其中最後一個是不是10
列表
'問題是因爲我可能沒有任何成績,所以LastOrDefault可能爲空。「如果這是LINQ到對象,那麼這很重要,但是使用EF將被轉換爲SQL,並且SQL傳播空值,而不是拋出NRE。 – Servy
沒有成績的學生會被計算在內嗎?比如,「沒有成績」是否意味着算作「最後」的成績!= 10或者不是?此外,您需要清楚「最後一級」是什麼意思 - 如果它是基於某個日期或最高ID的最新的或類似的東西,您必須確保使用'OrderBy'來確保'LastOrDefault '得到正確的記錄! – SlimsGhost