自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

對(duì)linq多表查詢的淺析

開發(fā) 后端
有時(shí)候我們需要對(duì)多張數(shù)據(jù)表進(jìn)linq多表查詢。目前就我所知的操作方法有三種:1.直接寫表達(dá)式;2.使用LoadOption選項(xiàng);3.使用Join語句。那么,這三種語句用哪一種好呢?讓我們來做一個(gè)小小的研究。

linq多表查詢的實(shí)用性如何呢,本文就要來揭曉了,請(qǐng)大家仔細(xì)閱讀。

1:1關(guān)系的多表操作

表結(jié)構(gòu)
表結(jié)構(gòu)如上

首先是測(cè)試取全記錄的情況(也就是取所有字段)

linq多表查詢之直接寫表達(dá)式

  1. var user = context.Users.Where(p => p.UserID == 
  2. 10300).Select(p => new {p, p.UserData});  
  3. SELECT [t0].[UserID], [t0].[Email], [t0].[NickName],
  4.  [t2].[test], [t2].[UserID] AS [UserID2], [t2].[MyInfo],
  5.  [t2].[MyFriends] FROM [dbo].[Users] AS [t0] 
  6. LEFT OUTER JOIN (SELECT 1 AS [test], [t1].[UserID], [t1].[MyInfo], 
  7. [t1].[MyFriends] FROM [dbo].[UserData] AS 
  8. [t1]) AS [t2] ON [t2].[UserID] = 
  9. [t0].[UserID]WHERE [t0].[UserID] = 10300 

linq多表查詢之使用LoadOption選項(xiàng)

  1. var option = new DataLoadOptions();  
  2. option.LoadWith(p => p.UserData);  
  3. context.LoadOptions = option;  
  4. var user = context.Users.Where(p => p.UserID == 10300).Single();  
  5. var userdata = user.UserData;  

雖然看上去取了2次數(shù)據(jù),但是因?yàn)橹付薒oadOption選項(xiàng),所以也是一次性從數(shù)據(jù)庫取出來的。

  1. SELECT [t0].[UserID], [t0].[Email], [t0].[NickName], [t2].[test],
  2.  [t2].[UserID] AS [UserID2], [t2].[MyInfo],
  3.  [t2].[MyFriends] FROM [dbo].[Users] AS [t0]  
  4. LEFT OUTER JOIN (SELECT 1 AS [test], [t1].[UserID], 
  5. [t1].[MyInfo], [t1].[MyFriends] FROM [dbo].[UserData] AS
  6.  [t1]) AS [t2] ON [t2].[UserID] = [t0].[UserID]  
  7. WHERE [t0].[UserID] = 10300 

linq多表查詢之使用Join語句

  1. var user = context.Users.Where(p => 
  2. p.UserID == 10300).Join(context.UserDatas, p => p.UserID,
  3.  o => o.UserID, (o, p) => new { o, p });  
  4. SELECT [t0].[UserID], [t0].[Email], [t0].[NickName],
  5.  [t1].[UserID] AS [UserID2], [t1].[MyInfo],
  6.  [t1].[MyFriends] FROM [dbo].[Users] AS [t0] 
  7. INNER JOIN [dbo].[UserData] AS [t1] ON [t0].[UserID] = 
  8. [t1].[UserID] WHERE [t0].[UserID] = 10300 

但是要注意的一點(diǎn)是,如果用了.Select(p => new {p, p.UserData}) 這種代碼,你在使用實(shí)體的時(shí)候會(huì)稍微麻煩一點(diǎn),要采用user.p.UserID這種形式,非常不爽。

可以這樣改進(jìn)一下,寫成.Select(p => new {User = p, p.UserData})這種形式,這樣的話可以使用user.User.UserID來訪問。如果想直接用user.UserID來訪問的話,就必須在new的時(shí)候?yàn)槊恳粋€(gè)屬性賦名稱,如果數(shù)據(jù)表字段很多的話,那我只能恭喜你中獎(jiǎng)啦。

如果要我評(píng)分的話,我會(huì)這樣評(píng)

linq多表查詢?cè)u(píng)分(1)
linq多表查詢?cè)u(píng)分(1)

如果只是要取部分字段的話,我們必須在Select的時(shí)候指定要取的字段,這樣的話,在返回實(shí)例的易用性上,三種方式將是一樣的效果。

linq多表查詢?cè)u(píng)分(2)
linq多表查詢?cè)u(píng)分(2)

至于具體怎么用就看各位喜好了…………..當(dāng)然,別忘了我們還有宇宙超級(jí)無敵的“視圖”可以使用...........

以上就是對(duì)linq多表查詢的簡單介紹。

【編輯推薦】

  1. 深度講解LINQ動(dòng)態(tài)查詢
  2. 實(shí)例講解Linq動(dòng)態(tài)條件查詢
  3. 淺析linq動(dòng)態(tài)條件查詢
  4. LINQ to SQL查詢分析
  5. System.Data.Linq程序集概述
責(zé)任編輯:阡陌 來源: 博客園
相關(guān)推薦

2009-09-17 18:05:15

linq to sql

2009-09-17 17:34:23

linq to sql

2009-09-14 19:14:51

LINQ動(dòng)態(tài)查詢

2009-09-22 15:26:30

Hibernate多表

2009-09-14 18:23:59

LINQ嵌套查詢

2009-09-15 09:19:22

linq動(dòng)態(tài)條件

2009-09-10 14:47:53

Linq .NET查詢

2009-09-15 17:16:58

LINQ查詢操作符

2009-09-14 17:10:57

LINQ模糊查詢

2009-09-14 18:19:49

LINQ模糊查詢

2010-08-24 09:47:05

LINQ to SQL

2009-09-16 17:29:10

Linq查詢二維數(shù)組

2009-09-13 21:52:16

LINQ字符串

2009-09-08 16:36:10

LINQ查詢基于泛型類

2009-09-14 18:57:19

LINQ查詢

2009-09-17 09:09:50

Lambda表達(dá)式Linq查詢

2009-09-15 14:30:11

Linq連接

2009-09-17 17:14:54

linq to sql

2009-09-16 15:33:22

LINQ to XML

2009-09-07 16:44:28

Linq String
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)