左外连接linq

时间:2013-11-15 16:43:15

标签: sql linq

如何在训练事件中将训练事件更改为左外连接,这非常基本在linq,所以请原谅我的无知它没有检索没有附加任何训练参考的记录

 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

1 个答案:

答案 0 :(得分:0)

最好与DefaultIfEmpty结合使用。

见这里: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();

这相当于这个select语句:

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