2016-08-15 68 views
0

我正在研究一个项目,其中有两个表PeopleEmails。我想用他的Emails来显示People记录,不管Emails表是否有该人的电子邮件。Linq查询显示两个表中的值,即使其中一个表没有任何相应记录

我试着用下面的查询,但它只显示人的电子邮件rocord在表中可用时的记录。

_db.People.Join(_db.Emails, e => e.PersonId, p=> p.PersonId, (e, p) => new { e, p }).Where(x => x.p.PersonId == personId).Select(x => new { Id = x.p.PersonId, x.p.FirstName, x.p.LastName, x.p.Gender, x.e.EmailAddress})OrderBy(x => x.Id).ToList(); 

任何人都可以建议我将如何显示它们具有或不具有EmailAddress的在Emails表中的所有的人。

谢谢!

+0

http://stackoverflow.com/search?q=%5Blinq%5Dleft+outer+join –

回答

1

所以,你想要一个左连接使用LINQ:

var results = (from p in _db.People 
       join e in _db.Emails 
       on p.PersonId equals e.PersonId into LeftJoin 
       from res in LeftJoin.DefaultIfEmpty() 
       select new 
       { 
        Id = p.PersonId, 
        FirstName = p.FirstName, 
        LastName = p.LastName, 
        Gender = p.Gender, 
        Email = res == null ? null : res.EmailAddress 
       }).ToList(); 

希望这会工作得很好。

+0

感谢它完美的作品...! –

相关问题