[英]Linq to SQL Foreign Keys
數據庫表的DDL:
Users:
id - int - identity
name - varchar - unique
PCs:
id - int - idnetity
name - varchar - unique
userid - FK to Users
Apps:
id - int - identity
name - varchar
pcid - FK to PCs
我在Visual Studio 2008中使用Linq To SQL設計器創建了一個DataContext。
我要執行此查詢:
select
users.name,
pcs.name,
apps.name
from
users u
join pcs p on p.userid = u.id
join apps a on a.pcid = p.id
在另一個線程中告訴我,我在該線程中發布了一個答案,以下內容不正確並且創建了交叉聯接。
var query = from u in db.Users // gets all users
from p in u.PCs // gets all pcs for user
from a in p.Apps // gets all apps for pc
select new
{
username = u.Name,
pcname = p.Name,
appname = a.Name
};
當我執行此查詢時,我得到正確的結果。 在每個表中有兩個記錄的交叉聯接應該返回8條記錄,但是我的查詢正確地返回了兩條記錄。
我很幸運,還是那個人告訴我我錯了嗎?
那可行。 這是正常的,因為第二個“ from”查詢個人計算機的用戶組,第三個“ from”詢問個人計算機的應用程序組。 而且我想這不會像T-Sql那樣產生交叉聯接,因為條件已經在外鍵和關聯中定義了。
但是我想這應該是您內部連接所希望的語法。
var query = from u in db.Users
join p in db.PCs on p.UserId == u.Id
join a in db.Apps on a.PCId == p.Id
select new
{
username = u.Name,
pcname = p.Name,
appname = a.Name
};
Jason-我錯過了您使用內置的Linq to SQL關系的事實。 很抱歉對於這個誤會; 在正常情況下,您在這里提出的建議將可以正常工作。
這對我來說很好,我不確定為什么會產生交叉聯接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.