如何将以下SQL查询重写为LINQ查询?

时间:2016-01-21 07:25:26

标签: c# sql-server linq

我想在LINQ中重写以下sql查询。但我的问题是我不知道如何使用LINQ LEFT JOIN编写添加AND(&&)操作符(查看我的第二个左连接)。有人可以帮忙吗?

SELECT      emp.EmployeeId,
            dsg.Name,
            pob.CompanyContribution,
            pob.EmployeeContribution,
            pob.OpeningIncome

FROM        HrmEmployees AS emp
LEFT JOIN   HrmDesignations AS dsg ON emp.HrmDesignationId=dsg.Id
LEFT JOIN   PfmOpeningBalance AS pob ON emp.Id=pob.HrmEmployeeId AND pob.CmnCalendarYearId=2
WHERE       emp.Id=6

我尝试了以下一个。但是编译错误 -

from emp in dbContext.EmployeeList
                        join dsg in dbContext.hrmDesig on emp.HrmDesignationId equals dsg.Id into DSGLeftJoin
                        from dsglj in DSGLeftJoin.DefaultIfEmpty()
                        join pob in dbContext.PfOpeningBalances on emp.Id equals pob.HrmEmployeeId into POBLeftJoin
                        from poblj in POBLeftJoin.DefaultIfEmpty() && poblj.CmnCalendarYearId == clndrId
                        where emp.Id==empId
                        select new
                        {
                            empIdr = emp.Id,
                            EmployeeId = emp.EmployeeId,
                            EmployeeName = emp.Name,
                            Designation = dsglj.Name,
                            OpeningIncome = poblj.OpeningIncome,
                            EmployeeContribution = poblj.EmployeeContribution,
                            CompanyContribution = poblj.CompanyContribution
                        }

2 个答案:

答案 0 :(得分:0)

试试这个。

 (from emp in HrmEmployees
  join dsg in HrmDesignations 
  on  emp.HrmDesignationId equals dsg.Id
  join pob in PfmOpeningBalance 
  on emp.Id equals pob.HrmEmployeeId AND pob.CmnCalendarYearId equals 2
  into eGroup
  from emps in eGroup.DefaultIfEmpty()
  emp.Id=6
  select new
    {
        EmployeeId =emp.EmployeeId,
        Name=dsg.Name,
        CompanyContribution=pob.CompanyContribution,
        EmployeeContribution=pob.EmployeeContribution,
        OpeningIncome=pob.OpeningIncome
    }).ToList();

答案 1 :(得分:0)

好的,你可以这样试试;

from emp in dbContext.EmployeeList
join dsg in dbContext.hrmDesig on emp.HrmDesignationId=dsg.Id
join pob in dbContext.PfOpeningBalanceson new {emp.Id, jp=pob.CmnCalendarYearId} equals new {pob.HrmEmployeeId, jp=2}
where emp.Id=6
select new {emp.EmployeeId,
            dsg.Name,
            pob.CompanyContribution,
            pob.EmployeeContribution,
            pob.OpeningIncome};

或者像这样;

from emp in dbContext.EmployeeList.Where(e=>e.Id.Equals(6))
join dsg in dbContext.hrmDesig on emp.HrmDesignationId=dsg.Id
join pob in dbContext.PfOpeningBalanceson.Where(x=>x.CmnCalendarYearId.Equals(2)) on emp.Id equals pob.HrmEmployeeId
select new {emp.EmployeeId,
            dsg.Name,
            pob.CompanyContribution,
            pob.EmployeeContribution,
            pob.OpeningIncome};