也许一个相当简单的问题,但我是Linq to SQL中的新成员。我有两个表将Linq中的两个表连接到SQL
User : UserId,name,Password,Email
USER_TABLE: Id, UserId, FirstName,LastName......
我想一个查询,给出例如:userID=3
然后给所有的细节(FirstName,LastName etc)
我如何加入这两个表?如果可能,我更愿意使用C#
代码!
也许一个相当简单的问题,但我是Linq to SQL中的新成员。我有两个表将Linq中的两个表连接到SQL
User : UserId,name,Password,Email
USER_TABLE: Id, UserId, FirstName,LastName......
我想一个查询,给出例如:userID=3
然后给所有的细节(FirstName,LastName etc)
我如何加入这两个表?如果可能,我更愿意使用C#
代码!
你不必自己做所有的管道。如果您在数据库中拥有正确的外键,则不必参加。
你可以这样做:
var query = from u in db.Users
select new { User = u;
FirstName = u.UserTables.FirstName }
像这样也许:
var joinedResult = from u in context.User
join u2 in context.UserTable on u.UserId equals u2.UserId
select new {
UserId = u.UserId,
FirstName = u2.FirstName
};
我猜你的例子只是一个例子,对不对?因为将这些数据分成两个表格没有多大意义。
您折中一下这样的数据评论,我完全同意 - 但我也认为它实际上很常见 - 特别是在ASP.Net会员代码中。 – Stuart 2011-03-22 09:21:16
我们都知道*这是*软件工程的一个很好的例子:) – 2011-03-22 09:22:33
用于内部连接使用类似:
var query = from u in db.Users
join ut in db.UserTables on u.UserId equals ut.UserId
select new
{
User = u,
Extra = ut
};
有可能使用LINQ to连接表:
如:
var test = (from a in DataContext.User
join b in DataContext.UserTable on a.UserId equals b.UserId
select new
{
UserId = a.UserId,
FirstName = b.FirstName
LastName = b.LastName
}).ToList();
问候
如果你走这条路线,一定要小心,你有你想要的管道 - 否则你可能会发现,对于100名用户的列表,你最终可能会做出101个查询 - 1个用户列表和100个每个FirstName反过来。 – Stuart 2011-03-22 10:31:30
@Stuart:你的意思是延期加载但不是,那是不正确的。如果您使用像这样的select {},它将只执行一次连接。但是,如果您要对用户执行foreach,然后在foreach中引用UserTable,您将得到延迟加载(1 + 100)。然而,这可以通过使用LoadOptions来控制 – Pleun 2011-03-22 11:19:18
是的 - 同意 - 我小心地说“可能”,并说你可以通过“管道”避免 - 但我可以更清楚,更明确 - 对不起。 – Stuart 2011-03-22 11:21:06