EF Core Sequence contains no elements
一、在.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();
更多: