Как выполнить Linq для Entites Left Outer Join - PullRequest
1 голос
/ 25 июня 2010

Я прочитал множество постов в блоге и пока не нашел ясного и простого примера того, как выполнить ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ между двумя таблицами. Статья Wikipedia о соединениях Join (SQL) предоставляет следующую простую модель:

CREATE TABLE `employee` (
`LastName` varchar(25),
`DepartmentID` int(4),
UNIQUE KEY `LastName` (`LastName`)
);

CREATE TABLE `department` (
`DepartmentID` int(4),
`DepartmentName` varchar(25),
UNIQUE KEY `DepartmentID` (`DepartmentID`)
);

Предположим, у нас был EmployeeSet в качестве контейнера для сотрудников ObjectSet<Employee> EmployeeSet и DepartmentSet ObjectSet<Department> DepartmentSet. Как бы вы выполнили следующий запрос, используя Linq?

SELECT LastName, DepartmentName
FROM employee e 
  LEFT JOIN department d 
    ON e.DepartmentID = d.DepartmentID

Ответы [ 2 ]

1 голос
/ 25 июня 2010

Я бы написал это, что далеко проще, чем join, а делает то же самое :

var q = from e in db.EmployeeSet
        select new 
        {
            LastName = e.LastName,
            DepartmentName = e.Department.DepartmentName
        };
0 голосов
/ 25 июня 2010

Вам необходимо использовать метод DefaultIfEmpty:

var query =
    from e in db.EmployeeSet
    join d in db.DepartmentSet on e.DepartmentID equals d.DepartmentID into temp
    from d in temp.DefaultIfEmpty()
    select new { Employee = e, Department = d };
...