码迷,mamicode.com
首页 > 数据库 > 详细

Linq Mysql GroupBy语句的问题处理

时间:2014-08-06 01:39:40      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   io   数据   for   

语句如下:
                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

Linq Mysql GroupBy语句的问题处理

标签:style   blog   http   color   使用   io   数据   for   

原文地址:http://www.cnblogs.com/xtechnet/p/EF_GroupBy1_K1_Error.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!