代码之家  ›  专栏  ›  技术社区  ›  LeppyR64

Linq到SQL外键

  •  2
  • LeppyR64  · 技术社区  · 16 年前

    数据库表的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
    

    我在VisualStudio2008中使用LINQtoSQL设计器创建了一个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条记录,但我的查询正确地返回了这两条记录。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Ali Ersöz    16 年前

    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
                };
    
        2
  •  2
  •   GalacticCowboy    16 年前

        3
  •  0
  •   Glenn Slaven    16 年前