2016-01-21 92 views
-1

我想在LINQ中重写下面的sql查询。但我的问题是,我不知道如何用LINQ LEFT JOIN写入添加AND(& &)运算符(查看我的第二个左连接)。任何人都可以帮忙吗?如何将以下SQL查询重写为LINQ查询?

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 
         } 
+1

任何你试过的东西? – Irshad

+0

是的,但得到编译错误。可能是错误是为wron语法@Irshad –

+1

在帖子中显示代码,我们可以帮助您 – Irshad

回答

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(); 
0

OK你可以试试这样;

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};