• Linq Group by获取数量和数据


    主表:

    public partial class Activity
        {
            [Key]
            public int pkActivity { get; set; }
            public int fkEmployee { get; set; }
            public string ActivityName { get; set; }
            public DateTime RegistrationStartDateTime { get; set; }
            public DateTime RegistrationEndDateTime { get; set; }
            public DateTime StartDateTime { get; set; }
            public DateTime EndDateTime { get; set; }
            public int MaxNumOfPeople { get; set; }
            public decimal PricePerPeople { get; set; }
            public string ActivityLocation { get; set; }
            public string ActivityStatus { get; set; }
            public string Description { get; set; }
            public string ImgUrl { get; set; }
            public DateTime CreateOn { get; set; }
            public string CreateBy { get; set; }
            public DateTime LastModifyOn { get; set; }
            public string LastModifyBy { get; set; }
        }


    重表:

    public partial class ActivityEmployee
        {
            [Key]
            public int pkActivityEmployee { get; set; }
            public int fkActivity { get; set; }
            public int fkEmployee { get; set; }
            public string Comments { get; set; }
            public DateTime CreateOn { get; set; }
            public string CreateBy { get; set; }
        }

    获取当前活动注册人数linq 写法,用DefaultIfEmpty 表示left join,通过group by new 进行分组,并通过groupedTable.Key.属性 提取数据:

    /// <summary>
            /// 获取我创建的活动列表。
            /// </summary>
            /// <param name="employeeKey"></param>
            /// <returns></returns>
            public IEnumerable<ActivityDTO> GetMyCreatedActivitiesList(int employeeKey)
            {
                var query = from activity in clientDbContext.Activity
                            join activityEmployee in clientDbContext.ActivityEmployee
                            on activity.pkActivity equals activityEmployee.fkActivity into temp
                            from t in temp.DefaultIfEmpty()
                            where activity.fkEmployee == employeeKey 
                            group t by new
                            {
                                activity.pkActivity,
                                activity.fkEmployee,
                                activity.ActivityName,
                                activity.RegistrationStartDateTime,
                                activity.RegistrationEndDateTime,
                                activity.StartDateTime,
                                activity.EndDateTime,
                                activity.ImgUrl,
                                activity.ActivityStatus,
                                activity.ActivityLocation,
                                activity.Description,
                                activity.CreateOn,
                                activity.CreateBy,
                                activity.LastModifyBy,
                                activity.LastModifyOn
                            }
                            into groupActivity
                            select new ActivityDTO()
                            {
                                Id = groupActivity.Key.pkActivity,
                                CreatedEmployeKey = groupActivity.Key.fkEmployee,
                                ActivityName = groupActivity.Key.ActivityName,
                                RegistrationStartDateTime = groupActivity.Key.RegistrationStartDateTime,
                                RegistrationEndDateTime = groupActivity.Key.RegistrationEndDateTime,
                                StartDateTime = groupActivity.Key.StartDateTime,
                                EndDateTime = groupActivity.Key.EndDateTime,
                                ActivityImageUrl = groupActivity.Key.ImgUrl,
                                ActivityStatus = groupActivity.Key.ActivityStatus,
                                ActivityLocation = groupActivity.Key.ActivityLocation,
                                Description = groupActivity.Key.Description,
                                CreateOn = groupActivity.Key.CreateOn,
                                CreateBy = groupActivity.Key.CreateBy,
                                LastModifyBy = groupActivity.Key.LastModifyBy,
                                LastModifyOn = groupActivity.Key.LastModifyOn,
                                RegisteredCount = groupActivity.Count(g=>g.fkActivity!=null)//报名人数,left join存在null数据
                            };
    
                return query;
            }
  • 相关阅读:
    分享一个利用HTML5制作的海浪效果代码
    3人从小公寓创业,到世界最大引擎公司,Unity创始人谈14年...
    决策树--从原理到实现
    使用行为树(Behavior Tree)实现游戏AI
    FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
    相遇3000亿美金之巅,阿里腾讯战力与血值几何?
    深入浅出聊Unity3D项目优化:从Draw Calls到GC
    Unity性能优化专题---腾讯牛人分享经验
    高通创始人复盘30年发展历程
    Gym
  • 原文地址:https://www.cnblogs.com/tylertang/p/8607912.html
Copyright © 2020-2023  润新知