一、在.Net Core中使用Ef的聚合函數報錯:
類似函數:
1,使用FirstOrDefault() 來代替 First()
2、使用SingleOrDefault 來代替 Single
3、使用 ElementAtOrDefault 來代替 .ElementAt
4、如果是在Average, Sum等中報錯
錯誤如下:
Sequence contains no elements
二、在.Net Core的 內存列表 Linq 聚合函數解決方案
var items = new int[] { 1, 2, 3, 4, 5 }; //Double avg = items.Average(); //替換: //Double avg = items.Where(x => x > 10).Average(); //解決方案:使用 DefaultIfEmpty // Double avg = items.Where(x => x > 10).DefaultIfEmpty().Average(); Double avg = items.Where(x => x > 10).DefaultIfEmpty().Max();
三、在 EF Core 數據庫列表 的聚合函數解決方案
注意:在目前的 EF Core 3.1中 DefaultIfEmpty() 不起作用對於聚合函數,還是報錯
處理方式1,可以使用排序的 FirstOrDefault() 處理
處理方式2,把數據庫數據拿到內存中 聚合計算
//錯誤代碼 //var num = GetQueryable() // .Where(q => q.GooID == gooid && q.Type == type) // .Select(q => q.Sort) // .ToList() // .DefaultIfEmpty() // .Max(); //排序取得最大值 var num = GetQueryable() .Where(q => q.GooID == gooid && q.Type == type) .Select(q => q.Sort) .OrderByDescending(q => q) .FirstOrDefault();
更多: