第一种:查询表达式语法:

IQueryable<EnrollmentDateGroup> data = from student in db.Students
group student by student.EnrollmentDate into dateGroup
select new EnrollmentDateGroup()
{
EnrollmentDate = dateGroup.Key,
StudentCount = dateGroup.Count()
};
return View(data.ToList());
第二种:方法labmda语法:
var context = new SiteDataContext();
var notifications = context.Notifications
.Where(n => n.UserId == userId)
.Where(n => !n.IsDismissed)
.GroupBy(n => n.NotificationType)
.Select(g => new NotificationViewModel
{
Count = g.Count(),
NotificationType = g.Key.ToString(),
BadgeClass = NotificationType.Email == g.Key
? "success"
: "info"
}); 实际使用过的例子:使用的是方法+labmda

[ChildActionOnly]
public ActionResult IndexCourseOnClickRange()
{
var courseList =new List<IndexClickRangeOnCourseViewModel>();  //先建立一个list .
var _coursesByClick = _resourceService.FindAll().Where(r => r.ResourceIsShow == true) //也可以使用ContextFactory.GetCurrentContext().Source取得课程资源。
.GroupBy(r => r.CourseID)
.Select(g => new IndexClickRangeOnCourseViewModel
{
CourseID = g.Key,
CourseResourceCount =g.Count(),
CourseResourceTotalClickCount = g.Sum(x =>x.ClickCount) //对分组后的数据 按点点击量汇总。
});

var _courses = _coursesByClick.ToList(); //这里是重点,必须使用tolist方法来立即执行,从数据库中获取值,如果不立即执行,延迟执行将会发生错误。

foreach (var item in _courses)
{
Course course =_courseService.Find(item.CourseID);;
courseList.Add(new IndexClickRangeOnCourseViewModel { CourseID = item.CourseID, CourseName = course.CourseName, CourseType=course.CourseType, CourseResourceCount=item.CourseResourceCount , CourseDescription =course.CourseDescription, PriorOrder = course.PriorOrder, CourseResourceTotalClickCount = item.CourseResourceTotalClickCount });
}
// var courses = _coursesByClick.ToList() as IEnumerable<Course>;
// var courses = _coursesByClick.OrderByDescending(c => c.CourseResourceTotalClickCount) as IQueryable<IndexClickRangeOnCourseViewModel>;
var coursesOrder =courseList.OrderByDescending(c => c.CourseResourceTotalClickCount).ThenBy(c => c.PriorOrder) as IEnumerable<IndexClickRangeOnCourseViewModel>; //排序后变成了IOrder ,为了使用take取前面的序列,必须转换成IEnumerable ;
if(coursesOrder.Count() >=7)
{
coursesOrder =coursesOrder.Take(7);

}

return PartialView("_IndexCourseOnClickRange", coursesOrder);
}

 

linq to EF分组查询 group by 的使用的更多相关文章

  1. Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

  2. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  3. MySQL进阶5--分组函数 / 分组排序和分组查询 group by(having) /order by

    MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数 ...

  4. SQL分组查询group by

    注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group ...

  5. .Net程序员学用Oracle系列(21):分组查询(GROUP BY)

    1.GROUP BY 标准分组 1.1.GROUP BY 概述 1.2.WHERE 和 HAVING 的区别? 2.GROUP BY 扩展分组 2.1.ROLLUP 分组 2.2.CUBE 分组 2. ...

  6. Mysql分组查询group by语句详解

    (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; ...

  7. [Mysql 查询语句]——分组查询group by

    group by (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from ...

  8. 关于thinkphp5中数据库分组查询group

    在使用tp5的group进行分组查询总是报错,以主键进行分组是不报错,但没有任何意义 与聚合函数一起使用的不会报错,如官方文档给出的代码 Db::table('think_user') ->fi ...

  9. 【转】 [MySQL 查询语句]——分组查询group by

    group by (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from ...

随机推荐

  1. hdu 2167 状态压缩

    /*与1565的解法差不多*/ #include<stdio.h> #include<string.h> int map[16][16]; int dp[2][1<< ...

  2. 兴奋剂检查(vijos 1426)

    背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外……………… 描述 虽然兴奋剂是奥运会及其他重要比赛的禁药,是禁止服用的.但是运动 ...

  3. mongodb 报错问题

    系统不支持:Mongo 错误位置 FILE: C:\wamp64\www\frame\a_tp32\ThinkPHP\Library\Think\Db\Driver\Mongo.class.php L ...

  4. 进程Queue、线程Queue、堆栈、生产者消费者模型

    没学队列之前,可以用文件实现进程之间通信 但是有2个问题: 1. 速度慢:文件是保存在硬盘空间 2. 为了数据安全要加锁(处理锁是一件很麻烦的事,容易死锁,建议自己轻易不要处理锁) 队列:队列是基于管 ...

  5. Django学习之 - 基础视图函数

    视图:Views 获取用户请求的方法: 1: request.GET 2: request.POST 3: request.FILES # checkbox 等多选文件 4:request.POST. ...

  6. HDU 6396 贪心+优先队列+读入挂

    Swordsman Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  7. eclipse设置全局编码为UTF-8的方法

    1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text file encoding ...

  8. 从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection

    前言 在阅读这篇文章:Announcing Net Core 3 Preview3的时候,我看到了这样一个特性: Docker and cgroup memory Limits We conclude ...

  9. DNS的工作原理及解析

    DNS协议是互联网核心协议之一.不管是上网浏览,还是编程开发,都需要了解一点它的知识. 一.什么是DNS? DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次 ...

  10. css中高度比img多出4px的问题

    一句话概括:为什么<a>标签比里面的img高度多出4px 的问题,主要还是由于 img是inline element, it's height is caculated different ...