也許一個相當簡單的問題,但我是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