首页 > 代码库 > Linq Mysql GroupBy语句的问题处理

Linq Mysql GroupBy语句的问题处理

语句如下:
                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语句确实存在性能问题,如果不是拆分写代码太啰嗦,真的应该拆分,保持代码中对数据库的操作尽量短平快。