我有這樣的代碼:LINQ到實體外連接,然後內部聯接
var query = (from p in dc.GetTable<Person>()
join pa in dc.GetTable<PersonAddress>() on p.Id equals pa.PersonId into tempAddresses
from addresses in tempAddresses.DefaultIfEmpty()
select new { p.FirstName, p.LastName, addresses.State });
這個工程很好,作爲一個外連接他們的(可選)地址的人。
現在我想加入這個帶有內部聯接的查詢的addresstype,因爲每個地址都只有一個addresstype。 因此,對於每個人來說,得到地址,如果有地址,也可以獲得地址類型。
所以我創造了這個(增加了內部連接到地址類型):
var query = (from p in dc.GetTable<Person>()
join pa in dc.GetTable<PersonAddress>() on p.Id equals pa.PersonId into tempAddresses
from addresses in tempAddresses.DefaultIfEmpty()
join at in dc.GetTable<AddressTypes>() on pa.addresstypeid equals at.addresstypeid
select new { p.FirstName, p.LastName, addresses.State, at.addresstype });
現在我得到的當人沒有地址的pa.addresstypeid的空引用錯誤....
有沒有辦法在linq中創建這個?
上面的代碼的行爲酷似我的代碼,但我的代碼有不同的實體,但我不能表現出實際的代碼...
編輯:
這裏是我的代碼示例實際上作品(替換FOO /欄中表)
from foo in foos
join bar in new barRepository(SessionTicket).GetList()
on foo.barId equals bar.barId
join barpersonbar in new barPersonbarRepository(SessionTicket,personId).GetList().Where(z=>z.PersonId == personid)
on bar.barId equals barpersonbar.barId
into outerbarpersonbar
from barpersonbar in outerbarpersonbar.DefaultIfEmpty()
那不是相同您評論即擴聲'超出範圍不是在這次「酒吧」代碼
我很驚訝,甚至編譯 - 你不應該使用'addresses'而不是' pa'在後面的代碼中? 'pa'不在範圍之內。 –
我編輯了這個問題 – Michel