数据库表的 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”查询用户的PC组,第三个“from”查询PC的Apps组。我想这不会像 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
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)