您的位置:首页 > 博客中心 > 数据库 >

Linq Mysql GroupBy语句的问题处理

时间:2022-03-13 22:36

语句如下:
                var resumeList = db.ChannelResume.Where(model);
                var groupValues = resumeList.GroupBy(t => new {t.AgentId, t.AgentName});
                var statistics = groupValues.Select(c => new ResumeStatisticsViewModel()
                {
                    Date = dateSpan,
                    AgentId = c.Key.AgentId,
                    AgentName = c.Key.AgentName,
                    TotalCount = c.Count(),
                    ValidCount = c.Count(k => k.Status == (int)ResumeStatus.Valid)
                });
                try
                {
                    //statistics = statistics.OrderBy(c => c.AgentName);
                    var tmp = statistics.ToList();
                    
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    throw;
                }

如上所示,针对GroupBy后的对象直接使用Select最后数据会返回错误,linq解析出来的sql语句中将AgentId,AgentName这两个分组条件没有作为临时表中的字段,导致最后整个sql语句执行报错:“Unknown column ‘GroupBy1.K1‘ in ‘field list‘”

在网上查到了两个地址:

http://bugs.mysql.com/bug.php?id=46742

http://stackoverflow.com/questions/15083627/linq-mysql-group-by-year-month-day-select-year-month-day-count

不过没有看到解决方案。

后来尝试,直接对groupValues变量做foreach循环。

                var resumeList = db.ChannelResume.Where(model);
                var groupValues = resumeList.GroupBy(t => new {t.AgentId, t.AgentName});
                foreach (var item in groupValues)
                {
                    var viewModel = new ResumeStatisticsViewModel()
                    {
                        Date = dateSpan, 
                        AgentId = item.Key.AgentId, 
                        AgentName = item.Key.AgentName,
                        TotalCount=item.Count(),
                        ValidCount = item.Count(t => t.Status == (int)ResumeStatus.Valid)
                    };
                    result.Add(viewModel);
                }

                return new PagedList<ResumeStatisticsViewModel>(result, m.Page, m.PageSize);

这样正常执行,不报错了。

感觉是Linq Mysql GroupBy语句和Select结合使用存在bug。

后话,linq语句确实存在性能问题,如果不是拆分写代码太啰嗦,真的应该拆分,保持代码中对数据库的操作尽量短平快。

 

Linq Mysql GroupBy语句的问题处理,布布扣,bubuko.com

热门排行

今日推荐

热门手游