2017-10-18 90 views
3

我需要一個LINQ查詢,它返回contact1和contact2沒有特定狀態的所有帳戶。Linq查詢 - 多表連接到一個表

var query = from a in accounts 
      join c1 in contact on a.contact1 equals c1.id 
      join c2 in contact on a.contact2 equals c2.id 
      where c1.status != 1 && c2.status != 1 
      select new {a.id} 

我很努力的邏輯。顯然這不會起作用,並且不會。不知道如何在LINQ中加入兩個表。

編輯: 我發現我的問題是在大多數情況下contact2爲空。我需要某種條件連接,只有在a.contact2不爲null時纔會發生。

爲了澄清,我試圖實現的邏輯是:檢索contact1狀態不等於1的所有帳戶。如果contact1 == 1,請檢查contact2 == 1.如果contact2!= 1檢索帳戶。

由於帳戶中的contact2並未始終填充,因此遇到問題。當它爲空時,我的原始查詢不會檢索到任何內容。

+0

的可能的複製[如何執行在LINQ拉姆達多個表之間的連接(https://stackoverflow.com/questions/9720225/how-to-perform-join-between-multiple-tables-in- linq-lambda) – RH6

+0

什麼是錯誤?你能清楚地建立這個代碼嗎? – arslanaybars

+0

@ RH6區別是這是同一個表的多個。沒有不同的。 – ZaphodBeeblbrox

回答

1

認爲我理解正確的邏輯......

只要一個賬戶或者contact1contact2比1,則檢索帳戶中的其他狀態。只有兩個聯繫人狀態爲1的帳戶纔會被退回。在聯繫人爲空的情況下,它將被忽略,因爲您無法檢查狀態。

var query = from a in accounts 
      from c in contacts 
      where c.Id == a.Contact1 || c.Id == a.Contact2 
      where c.Status != 1 
      select new { a.Id };