左关联关联子查询(分组汇总),怎么做? 返回

求助
1 63
该叫什么 wsj 发布于1周前
悬赏:5 飞吻

我要查询部门列表,同时每个部门当前员工数分别显示,但不是所有部门会有下属员工。

select d.*,e.cnt 
from HR_Department d
inner join HR_Org o on d.Org_Id=o.OrgId and o.IsDelete=0
left join (
select Dept_Id,Count(0) AS cnt 
from HR_Employee
where [Enabled]=1
Group by Dept_Id
) AS e on d.DeptId=e.Dept_Id
where IsDelete=0

我尝试着也写了一下:

    using (var db = DataConn.GetDbClient(connName))
    {
                if (db != null)
                {
                    var q1 = db.Queryable<HR_Department, HR_Org>((a, g) => new object[] {
                        JoinType.Inner, a.Org_Id == g.OrgId && g.IsDelete==false
                    })
                    .Where((a, g) => a.Enabled == true && a.IsDelete == false);
                    //外部传入动态条件函数
                    if (whereFunc != null)
                    {
                        q1 = q1.Where(whereFunc);   
                    }
                    //分组统计授权角色数
                    var q2 = db.Queryable<HR_Employee>().GroupBy(e => e.Dept_Id).Select(ra =>
                        new
                        {
                            Dept_Id = e.Dept_Id,
                            EmpCount = "COUNT(0)"   //不知如何写,直接写字符串没有用!
                            //EmpCount= SqlFunc.AggregateCount(e.Dept_Id)
                        }
                     ).Select<CountModel>();    //CountModel实体类,包含列:Dept_Id、EmpCount 
                    //两表关联(不是所有部门有员工,下行代码会隐藏无员工的部门)
                    var q = db.Queryable(q1, q2, (a, b) => a.DeptId == b.Dept_Id);
                    /*
                    //以下错误:应该是没有符合格式的函数定义,即不支持。
                    var q = db.Queryable(q1, q2, (a, b) => new object[] {
                      JoinType.Left, a.DeptId== b.Dept_Id
                    }); }
                    */
                    //外部定义排序
                    if (!string.IsNullOrEmpty(order))
                    {
                        q = q.OrderBy(order);
                    }
                    //var sql = q.ToSql();
                    return q.ToPageList(pageIndex, pageSize, ref count);
                }
            }

最后要求分页显示。


用ToSql()测试,输出SQL代码中,没有"Count(0) AS EmpCount"。


请高手指教!谢谢!

热忱回答1

  • ..A.. ..A.. VIP0
    2天前

    实在不知道怎么写,就按照文档里面的,直接传sql:

    var t12 = db.SqlQueryable<Student>("select * from student").ToPageList(1, 2);

    0 回复

版块

学习文档

最新会员

发布达人

回贴达人