对linq多表查询的浅析
创始人
2024-06-07 01:51:48
0

linq多表查询的实用性如何呢,本文就要来揭晓了,请大家仔细阅读。

1:1关系的多表操作

表结构
表结构如上

首先是测试取全记录的情况(也就是取所有字段)

linq多表查询之直接写表达式

  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选项

  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次数据,但是因为指定了LoadOption选项,所以也是一次性从数据库取出来的。

  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 

但是要注意的一点是,如果用了.Select(p => new {p, p.UserData}) 这种代码,你在使用实体的时候会稍微麻烦一点,要采用user.p.UserID这种形式,非常不爽。

可以这样改进一下,写成.Select(p => new {User = p, p.UserData})这种形式,这样的话可以使用user.User.UserID来访问。如果想直接用user.UserID来访问的话,就必须在new的时候为每一个属性赋名称,如果数据表字段很多的话,那我只能恭喜你中奖啦。

如果要我评分的话,我会这样评

linq多表查询评分(1)
linq多表查询评分(1)

如果只是要取部分字段的话,我们必须在Select的时候指定要取的字段,这样的话,在返回实例的易用性上,三种方式将是一样的效果。

linq多表查询评分(2)
linq多表查询评分(2)

至于具体怎么用就看各位喜好了…………..当然,别忘了我们还有宇宙超级无敌的“视图”可以使用...........

以上就是对linq多表查询的简单介绍。

【编辑推荐】

  1. 深度讲解LINQ动态查询
  2. 实例讲解Linq动态条件查询
  3. 浅析linq动态条件查询
  4. LINQ to SQL查询分析
  5. System.Data.Linq程序集概述

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...