2014-09-30 23 views
0

我有一個LINQ查詢是這樣的:LINQ的加入,接受空值

var items = from v in work.GetRepo<VW_V>().Query 
     join k in work.GetRepo<K>().Query on v.Loc_Id equals k.Id 
     join p in work.GetRepo<P>().Query on v.Peer_Id equals p.Id 
     join tt in work.GetRepo<TT>().Query on v.Item_Id equals tt.Id 
     select (new MyModel 
     { 
      Id = v.Id, 
      Location = k != null ? k.Name : string.Empty, 
      ItemName = tt.Name, 
      Peer = p != null ? p.Name : string.Empty, 
     }); 

此查詢工作正常。但我想要記錄下其中一些人沒有同伴。我怎樣才能做到這一點?這個查詢返回只有Peers的記錄,我怎樣才能得到既有對等又沒有對等的記錄。如果對等體存在於該記錄中,我想顯示對等體的名稱。謝謝。

+2

這就是所謂的外連接。更多:http://msdn.microsoft.com/en-us/library/bb397895.aspx – 2014-09-30 12:59:17

回答

1
var items = from v in work.GetRepo<VW_V>().Query 

      join k in work.GetRepo<K>().Query 
       on v.Loc_Id equals k.Id 

      join p in work.GetRepo<P>().Query 
       on v.Peer_Id equals p.Id 
      into pJoinData 
      from pJoinRecord in pJoinData.DefaultIfEmpty() 

      join tt in work.GetRepo<TT>().Query 
       on v.Item_Id equals tt.Id 

      select (new MyModel 
      { 
       Id = v.Id, 
       Location = k != null ? k.Name : string.Empty, 
       ItemName = tt.Name, 
       Peer = pJoinRecord != null ? pJoinRecord.Name : string.Empty, 
      }); 
1

它被稱爲左outer join。嘗試:

var items = from v in work.GetRepo<VW_V>().Query 
     join k in work.GetRepo<K>().Query on v.Loc_Id equals k.Id 
     join p in work.GetRepo<P>().Query on v.Peer_Id equals p.Id into subpeer_j 
     from subpeer in subpeer_j.DefaultIfEmpty() 
     join tt in work.GetRepo<TT>().Query on v.Item_Id equals tt.Id 
     select (new MyModel 
     { 
      Id = v.Id, 
      Location = k != null ? k.Name : string.Empty, 
      ItemName = tt.Name, 
      Peer = subpeer != null ? subpeer.Name : string.Empty, 
     });