簡體   English   中英

Linq to SQL外鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM