分组运算
类似于Linq,Obase内也可以对ObjectSet使用GroupBy方法来对对象分组,Obase支持对对象直接分组为IGroupingBy,以及分组后投影成其他对象和匿名对象,这里使用之前快速入门中使用过的班级和学生间的关系作为示例:
var result2 = context.Students.GroupBy(s => s.ClassId, s => s.StudentId).ToList();
得到的结果是一个IGroupingBy的集合,其中包含一个键位ClassId的IGroupingBy对象。 我们增加一个简单的分组类:
/// <summary>
/// 简单Stu类 符合Json命名标准
/// </summary>
public class SimpleGroup
{
/// <summary>
/// ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 个数
/// </summary>
public long Count { get; set; }
}
//按照属性分组 并投影成某个类
var result3 = context.Students
.GroupBy(s => s.ClassId, s => s.StudentId,
(cid, sids) => new SimpleGroup {Id = cid, Count = sids.Max()}).ToList();
将分组后成员最大值作为最大的个数,这里得到的就是一个SimpleGroup的集合,其中ID是ClassId,Cout是是分组后的最大值。
//按照属性分组 并投影成List<匿名类>
var result1 = context.Students
.GroupBy(s => s.ClassId, s => s.StudentId,
(cid, sids) => new {Id = cid, count = sids.Count()}).ToList();
当然,投影成匿名对象也是可以的得到的结果就是一个匿名类列表。