linq to EF分组查询 group by 的使用

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

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);
}

 
时间: 2024-10-13 01:07:39

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

Oracle和MySQL分组查询GROUP BY

Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错:“ORA-00979: not a GROUP BY expression”.而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确.所以,作者建议在写SQL语句的时候,

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

MySQL进阶--分组排序和分组查询 group by(having) /order by /* 介绍分组函数 功能:用做统计使用,又称为聚合函数或组函数 1.分类: sum, avg 求和 /平均数, 只处理数值型,都绝对忽略NULL值(avg处理时统计的个数没有null项) max ,min ,可以求字符串最大最小 ,可以匹配日期,都绝对忽略NULL值 count ,不计算NULL ,不把null算进数里 #2. 参数支持类型 SELECT MIN(last_name) ,MAX(last_

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

#group by(1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组(2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; +------+------+--------+------+------+-------------+ | num | d_id | name | age | sex | homeaddr | +------+------+--------+------+------+----

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

在使用tp5的group进行分组查询总是报错,以主键进行分组是不报错,但没有任何意义 与聚合函数一起使用的不会报错,如官方文档给出的代码 Db::table('think_user') ->field('user_id,username,max(score)') ->group('user_id') ->select(); 但是和我的需求不一样,我需要根据某一列分组将指定字段链接起来 这是我用的原生查询,原生查询字段不需要加单引号 Db::query("select at_id

linq 中的分组查询

直接看代码: //一个字段分组 var data1 = from a in query group a by a.Name into b select new { Total = b.Sum(c=>c.BrowseRealCount), Id = b.Select(c=>c.Id) }; //多个字段分组,可以使用匿名类方式 var data2 = from a in query group a by new { a.Name, a.Summary } into b select new {

linq 多表分组查询统计

var q1 = from orderitem in q2 join pd in _iProductDetailContract.Entities on orderitem.ProductDetailId equals pd.Id join pm in ProductMainContract.Entities on pd.ProductMainId equals pm.Id join user in UserContract.Entities on pm.BuyerId equals user.

EF 分组查询

var result = from m in userPrefers.GroupBy(t => new { t.Pet_Preferential.Merchant.MerchantId, t.Pet_Preferential.Merchant.MerchantName }) select new { MerchantId = m.Key.MerchantId, MerchantName = m.Key.MerchantName, Preferential = from u in m orderb

8.4Solr API使用(Result Grouping分组查询)

转载请出自出处:http://eksliang.iteye.com/blog/2169458 一.概述 分组统计查询不同于分组统计(Facet),facet只是简单统计记录数,并不能为每组数据返回实际的数据回来,solr提供的grouping查询能够解决这一问题,也就是说,他除了能分组外,还能把每组数据返回来. 二.语法简介 参考实例一 查询参数如下: q=*:* &group=true &group.field=price 返回结果如下: Solr Grouping参数列表 参数 参数含

接连查询和分组查询

一. 分组查询 1.语法 SELECT ... FROM ... GROUP BY ... --分组查询Group by    select COUNT(*) as 学生人数,GradeId as 年级编号 from Student group by GradeId 2.进行多表之间的分组查询 --查询每门课程的平均分    --where 和 group by 和 order by 的顺序    select AVG(StudentResult) as 平均分,SubjectName as 课