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();

 

 

更多:

.Net Core3 新特性整理 

.net core中使用GB2312编码的问题

.Net Core EF 使用整理合集   

posted @ 2020-04-03 10:57  天马3798  阅读(5613)  评论(1编辑  收藏  举报