2012-10-23 58 views
0

許多查詢我有4個表:許多在LINQ

地址 - AddressID,城市,地址,郵編

OBAddress - OBID,AddressID

OB - OBID

美國 - StateID,StateAbbreviation

如何加入三個標籤哪些在多對多的關係中?我想:

var recordsPhysicalAddress = (from a in db.Addresses 
    join oba in db.obAddresses on a.AddressID equals oba.AddressID 
    join ob in db.obAddresses on oba.obID equals passedinID 
    join s in db.States on a.StateID equals s.StateID 
    where oba.obID == ob.obID 
    && a.AddressTypeID == '5' //5 is records physical address 
    select new 
    { 
     a.Address1, 
     a.City, 
     a.StateID, 
     s.StateAbbreviation, 
     a.ZipCode 
    }).FirstOrDefault(); 
+0

我不認爲你需要這個「where oba.obID == ob.obID」,因爲你已經在那做了一個連接。 – IronMan84

+0

然後,想一想,你爲什麼要進行連接而不使用連接中的任何東西呢?爲什麼還要麻煩加入他們呢? – IronMan84

+0

我編輯過你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

1
var query = (from a in db.Addresses 
      join oba in db.obAddresses on a.AddressID equals oba.AddressID 
      // do not join with db.obAddresses again 
      join s in db.States on a.StateID equals s.StateID 
      where oba.obID == passedinID // filter here 
        && a.AddressTypeID == '5' 
      select new { 
        a.Address, 
        a.City, 
        a.StateID, 
        s.StateAbbreviation, 
        a.ZipCode 
      }).FirstOrDefault(); 

我把一些言論的評論進行查詢。但仍然奇怪你爲什麼提到有問題的桌子?

+0

我試過了,仍然回來null ... – user1220099

+1

@ user1220099你確定有一些數據,符合你的查詢條件嗎? Btw addresstypeID的類型是char? –

+0

該死的,那是整個時間,addresTypeID不是char,它的類型是int。愚蠢的錯誤,感謝抓住那..... – user1220099