数据库表的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条记录,但我的查询正确返回两条记录。
我很幸运,或者是那个告诉我我错了的人?
答案 0 :(得分:2)
那会有效。这是正常的,因为第二个“来自”询问PC的用户组和第三个“来自”,即应用程序集的个人电脑。我想这不会产生交叉连接作为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
};
答案 1 :(得分:2)
答案 2 :(得分:0)
这对我来说很好,我不确定为什么会创建一个交叉连接