我有兩個表:如何在第二個表中的兩個字段上進行表連接?
- 消息 - 除其他事項外,有一個to_id和from_id場。
- 人 - 有相應的PERSON_ID
我試圖找出如何做到以下幾點單一LINQ查詢:
給我已發送所有消息,從人x(idself)。
我在這有幾個裂縫。
不太正確
MsgPeople = (from p in db.people
join m in db.messages on p.person_id equals m.from_id
where (m.from_id == idself || m.to_id == idself)
orderby p.name descending
select p).Distinct();
這幾乎工作,但我認爲它忽略了一個情況:
「誰從來沒有收到消息的人,只是送一個給我」
這是如何工作在我的腦海
所以我真的需要的是這樣的:
join m in db.messages on (p.people_id equals m.from_id or p.people_id equals m.to_id)
獲取我,我以後
看來你不能這樣做的人的一個子集。我已經嘗試了一些其他選擇,如 做兩聯接:
MsgPeople = (from p in db.people
join m in db.messages on p.person_id equals m.from_id
join m2 in db.messages on p.person_id equals m2.to_id
where (m2.from_id == idself || m.to_id == idself)
orderby p.name descending
select p).Distinct();
,但是這給了我我需要的結果的一個子集,我想的東西 做的加入被解決的順序。
我對LINQ(甚至可能是數據庫理論)的理解是令人尷尬的膚淺,我期待着解決我的問題。
我避免這種情況,因爲這可能會導致一些錯過,關聯只能在一個字段,所以說你選擇to_id,如果在idself的人沒有發送電子郵件它會被錯過,因爲這產生將SELECT [T 0]的SQL [PERSON_ID] FROM [人] AS [T 0] WHERE EXISTS( SELECT NULL AS [清空] FROM [消息] AS [T1] WHERE (([t1]。[to_id] = @ p0)OR([t1]。[from_id] = @ p1))AND([t1]。[to_id] = [t0]。[Person_id]) ) 我認爲 – Pharabus 2010-05-28 17:18:24
我錯過了人與消息之間存在多重關係的事實。固定! – 2010-05-28 17:36:26
是啊,從我使用關係:)從我工作+1也我發現LINQPad很好地命名協會! – Pharabus 2010-05-28 17:41:13