Как вернуть запись, даже если в дочерней таблице нет записей? - PullRequest
0 голосов
/ 01 февраля 2011

Следующий запрос возвращает список сотрудников и их имена, адрес электронной почты и названия соответствующих компаний.Проблема в том, что сотрудники не имеют адреса электронной почты в нашей системе.Если у сотрудника нет адреса электронной почты, он полностью исключается из набора результатов.

Как вернуть нулевой (или пустую строку и т. Д.) Адрес электронной почты, который не существует, вместо исключениясотрудник?

var employees = from e in Employees where e.ContactAttributes.Any (ca => ca.AttributeID == 19730317 )
from om in e.ChildOrganizationMaps
from ea in e.EmailAddresses
select new {e.FName, e.LName, ea.EmailAddress, om.Parent.CompanyName};

employees.Dump();

Ответы [ 3 ]

0 голосов
/ 01 февраля 2011

Ваш запрос использует объединения. Вы можете использовать внешнее объединение или использовать «Включить» для «активной загрузки», чтобы вы извлекли все сущности и их отношения:

var employees = Employees.Include("ChildOrganizationMaps").Include("EmailAddresses").Where(e=>e.ContactAttributes.Any(ca.AttributeID = 19730317)
.Select(e => new {e.FName, e.LName, e.EmailAddress.Address});
0 голосов
/ 01 февраля 2011

Изменить: Хорошо, сделайте это с явным левым соединением (DefaultIfEmpty), чем.

var employees = 
from e in Employees
from om in ChildOrganizationMaps
  .where(o => e.pkKey == o.fkKey).DefaultIfEmpty()
from ea in EmailAddresses
  .where(o => e.pkKey == o.fkKey).DefaultIfEmpty()
where 
  e.ContactAttributes.Any (ca => ca.AttributeID == 19730317 )
select new 
{
  e.FName, 
  e.LName, 
  ea.EmailAddress, 
  om.Parent.CompanyName
};
0 голосов
/ 01 февраля 2011

Используйте внешнее соединение. Он вернет ноль для полей в таблице, в которой нет строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...