只有在聚合对象需要筛选的时候才会用到Having,一般分组查询用不到可以去掉
var list = db.Queryable<Student>() .GroupBy(it => new { it.Id, it.Name }) .Having(it => SqlFunc.AggregateAvg(it.Id) > 0)//不是聚合函数用Where就可以了 .Select(it => new { idAvg = SqlFunc.AggregateAvg(it.Id), name = it.Name }) .ToList(); //SELECT AVG([Id]) AS[idAvg], [Name] AS[name] FROM[Student] GROUP BY[Name],[Id] HAVING(AVG([Id]) > 0 )
根据时间分组,不计时分秒,只按日期分组
var getOrderBy = db.Queryable<Order>().Select(it=>new { Id=it.Id, Name=it.Name, CreateTime=it.CreateTime.Date//只取日期 }) .MergeTable()//将查询结果转成一个表 .GroupBy(it=>it.CreateTime) .Select(it=>new { id =SqlFunc.AggregateMax(it.Id),crate=it.CreateTime }) .ToList();
一般用来指定字段去重复
var list = db.Queryable<Student>().Distinct().Select(it => new { it.Name }).ToList(); SELECT DISTINCT [Name] AS [Name] FROM [STudent]
像Oracle SqlServer可以用 PartitionBy实现
db.Queryable<Order>().PartitionBy(it=>it.Name).Take(1).ToList()
其它数据库 PartitionBy 等同于 Group by
2016 © donet5.comApache Licence 2.0