首页 > 代码库 > 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语句确实存在性能问题,如果不是拆分写代码太啰嗦,真的应该拆分,保持代码中对数据库的操作尽量短平快。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。