2016-08-15 8 views
0

私は2つのテーブルPeopleEmailsがあるプロジェクトで作業しています。彼のEmailsのレコードをEmailsテーブルに表示するかどうかを決めました。テーブルの1つに対応するレコードが1つもない場合でも、2つのテーブルの値を表示するLinqクエリ

私は以下のクエリで試してみましたが、PersonのEmail 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(); 

は、誰もが私が持っているかEmailsテーブルでのEmailAddressを持っていないすべての人々を表示する方法を提案することができます。

ありがとうございました!

+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

ありがとうございます...完璧に...! –

関連する問題