繁体   English   中英

Linq退出加入并计数-如何

[英]Linq left join and count - How To

我有以下Linq表达式:

var employeeTypes = from t in DbContext.Set<SetupEmployeeType>().AsNoTracking()
                    join emp in DbContext.Set<Employee>().AsNoTracking() on t.EmployeeTypeId equals emp.EmployeeTypeId into employee
                    from subemp in employee.DefaultIfEmpty()
                    where t.MasterEntity == masterEntity
                    select new Model.SetupEmployeeTypeModel()
                    {
                        EmployeeTypeId = t.EmployeeTypeId,
                        Description = t.Description,
                        AllowProbation = t.AllowProbation,
                        IsActive = t.IsActive,
                        TotalEmployee = (subemp == null ? 0 : subemp.Count) 

                    };

我需要设置自定义模型的TotalEmployee属性。

因此,如果没有与任何EmployeeTypeId相关联的EmployeeTypeId,则TotalEmployee应该为0 ,否则应该为Employees Count

任何线索如何做到这一点?

如果我可能没有记错的话,请考虑使用子查询,例如-

var q = from empType in DbContext.Set<SetupEmployeeType>().AsNoTracking()
        let empCount =
        (
          from emp in DbContext.Set<Employee>().AsNoTracking()
          where empType.EmployeeTypeId == emp.EmployeeTypeId
          select emp
        ).Count()
        select new Model.SetupEmployeeTypeModel()
        {
            EmployeeTypeId = empType.EmployeeTypeId,
            Description = empType.Description,
            AllowProbation = empType.AllowProbation,
            IsActive = empType.IsActive,
            TotalEmployee = empCount
        };

使用分组依据。

var q = from empType in DbContext.Set<SetupEmployeeType>().AsNoTracking()
        join empCnt in 
            (
                from emp in DbContext.Set<Employee>().AsNoTracking()
                group emp by emp.EmployeeTypeId into grp
                select new { EmployeeTypeId = grp.Key, TotalEmp = grp.Count()}
            ) on empType.EmployeeTypeId equals empCnt.EmployeeTypeId into employees
        from subemp in employees.DefaultIfEmpty()
        where t.MasterEntity == masterEntity
        select new Model.SetupEmployeeTypeModel()
        {
            EmployeeTypeId = empType.EmployeeTypeId,
            Description = empType.Description,
            AllowProbation = empType.AllowProbation,
            IsActive = empType.IsActive,
            TotalEmployee = subemp.TotalEmp
        };

我想出了以下解决方案:

 var employeeTypes = from t in DbContext.Set<SetupEmployeeType>().AsNoTracking()
                                join empg in
                                    (
                                        from emp in DbContext.Set<Employee>().AsNoTracking()
                                        group emp by emp.EmployeeTypeId into g
                                        select new { EmployeeTypeId = g.Key, Total = g.Count() }
                                    ) on t.EmployeeTypeId equals empg.EmployeeTypeId into employee
                                from subemp in employee.DefaultIfEmpty()
                                where t.MasterEntity == masterEntity

                                select new Model.SetupEmployeeTypeModel()
                                {
                                    EmployeeTypeId = t.EmployeeTypeId,
                                    Description = t.Description,
                                    AllowProbation = t.AllowProbation,
                                    IsActive = t.IsActive,
                                    TotalEmployee = subemp.Total 

                                };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM