语句如下:
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
时间: 2024-11-01 06:17:06