0

How do i change the training events into a left outer join in training events im very basic at linq so excuse my ignorance its not retrieve records that don't have any trainnevent reference attached to it

 var q = from need in pamsEntities.EmployeeLearningNeeds
                    join Employee e in pamsEntities.Employees on need.EmployeeId equals e.emp_no
                    join tevent in pamsEntities.TrainingEvents on need.TrainingEventId equals tevent.RecordId                            
                    where need.EmployeeId == employeeId
                    where need.TargetDate >= startdate 
                    where need.TargetDate <= enddate 
                    orderby need.TargetDat
c-sharp-and-swiftui-devni
  • 3,743
  • 4
  • 39
  • 100

1 Answers1

0

It's best to use where in combination with DefaultIfEmpty.

See here: LEFT JOIN in LINQ to entities?

var query2 = (
    from users in Repo.T_Benutzer
    from mappings in Repo.T_Benutzer_Benutzergruppen.Where(mapping => mapping.BEBG_BE == users.BE_ID).DefaultIfEmpty()
    from groups in Repo.T_Benutzergruppen.Where(gruppe => gruppe.ID == mappings.BEBG_BG).DefaultIfEmpty()
    //where users.BE_Name.Contains(keyword)
    // //|| mappings.BEBG_BE.Equals(666)  
    //|| mappings.BEBG_BE == 666 
    //|| groups.Name.Contains(keyword)

    select new
    {
         UserId = users.BE_ID
        ,UserName = users.BE_User
        ,UserGroupId = mappings.BEBG_BG
        ,GroupName = groups.Name
    }

    );


var xy = (query2).ToList();

Which is equivalent to this select statement:

SELECT 
     T_Benutzer.BE_User
    ,T_Benutzer_Benutzergruppen.BEBG_BE
    -- etc.
FROM T_Benutzer

LEFT JOIN T_Benutzer_Benutzergruppen
    ON T_Benutzer_Benutzergruppen.BEBG_BE = T_Benutzer.BE_ID 

LEFT JOIN T_Benutzergruppen
    ON T_Benutzergruppen.ID = T_Benutzer_Benutzergruppen.BEBG_BG
Community
  • 1
  • 1
Stefan Steiger
  • 78,642
  • 66
  • 377
  • 442