2011-02-01 108 views
0

以下查詢返回僱員及其姓名,電子郵件地址和各自公司名稱的列表。問題在於我們的系統中沒有電子郵件地址的員工。如果員工沒有電子郵件地址,則他們完全從結果集中排除。即使他們在子表中沒有記錄,我該如何返回記錄?

如何爲不存在的電子郵件地址返回null(或空字符串等),而不是排除員工?

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

回答

0

您的查詢正在使用連接。您可以使用外連接,或使用包括「預先加載」,這樣你就會把所有的實體和它們之間的關係:

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

使用外連接。它將爲沒有行的表中的字段返回null。

0

編輯: 好,具有明確的左邊做加盟(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

不,這沒有奏效。使用上述,我可以到達e.EmailAddresses,但不是EmailAddress和e.ChildOrganizationMaps,但不是Parent.CompanyName。謝謝。 – DenaliHardtail 2011-02-01 22:20:23

相關問題