Linq学习(四)-联合查询

一、本将主要介绍

Union、Concat、Intersect、Except的使用操作

1.Union

查询昵称中带有Friend和带有Lee的用户

Linq

(from a in Blog_Users where a.NickName.Contains("Lee") select a)
.Union
(from a in Blog_Users where a.NickName.Contains("Friend") select a)

sql

-- Region Parameters
DECLARE @p0 NVarChar(1000) = '%Lee%'
DECLARE @p1 NVarChar(1000) = '%Friend%'
-- EndRegion
SELECT [t2].[UserId], [t2].[NickName], [t2].[CreateTime]
FROM (
    SELECT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]
    FROM [Blog_User] AS [t0]
    WHERE [t0].[NickName] LIKE @p0
    UNION
    SELECT [t1].[UserId], [t1].[NickName], [t1].[CreateTime]
    FROM [Blog_User] AS [t1]
    WHERE [t1].[NickName] LIKE @p1
    ) AS [t2]

Lambda

Blog_Users
   .Where (a => a.NickName.Contains ("Lee"))
   .Union (
      Blog_Users
         .Where (a => a.NickName.Contains ("Friend"))
   )

2.Concat

查询昵称中带有Friend和昵称中带有Lee的用户,相同的用户信息不过滤

Linq to sql

(from a in Blog_Users where a.NickName.Contains("Friend") select a)
.Concat
(from a in Blog_Users where a.NickName.Contains("Lee") select a)

sql

-- Region Parameters
DECLARE @p0 NVarChar(1000) = '%Friend%'
DECLARE @p1 NVarChar(1000) = '%Lee%'
-- EndRegion
SELECT [t2].[UserId], [t2].[NickName], [t2].[CreateTime]
FROM (
    SELECT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]
    FROM [Blog_User] AS [t0]
    WHERE [t0].[NickName] LIKE @p0
    UNION ALL
    SELECT [t1].[UserId], [t1].[NickName], [t1].[CreateTime]
    FROM [Blog_User] AS [t1]
    WHERE [t1].[NickName] LIKE @p1
    ) AS [t2]

Lambda

Blog_Users
   .Where (a => a.NickName.Contains ("Friend"))
   .Concat (
      Blog_Users
         .Where (a => a.NickName.Contains ("Lee"))
   )

3.Intersect(交集)

查询昵称中带有Friend的,且昵称中带有Lee的用户

Linq to sql

(from a in Blog_Users where a.NickName.Contains("Friend") select a)
.Intersect
(from a in Blog_Users where a.NickName.Contains("Lee") select a)

sql

-- Region Parameters
DECLARE @p0 NVarChar(1000) = '%Lee%'
DECLARE @p1 NVarChar(1000) = '%Friend%'
-- EndRegion
SELECT DISTINCT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]
FROM [Blog_User] AS [t0]
WHERE (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [Blog_User] AS [t1]
    WHERE ([t0].[UserId] = [t1].[UserId]) AND ([t1].[NickName] LIKE @p0)
    )) AND ([t0].[NickName] LIKE @p1)

Lambda

Blog_Users
   .Where (a => a.NickName.Contains ("Friend"))
   .Intersect (
      Blog_Users
         .Where (a => a.NickName.Contains ("Lee"))
   )

4.Except(排除交集)

查询昵称中带有Friend,并从中删除昵称中带有Zhao的用户

Linq to sql

(from a in Blog_Users where a.NickName.Contains("Friend") select a)
.Except
(from a in Blog_Users where a.NickName.Contains("Zhao") select a)

sql

-- Region Parameters
DECLARE @p0 NVarChar(1000) = '%Zhao%'
DECLARE @p1 NVarChar(1000) = '%Friend%'
-- EndRegion
SELECT DISTINCT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]
FROM [Blog_User] AS [t0]
WHERE (NOT (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [Blog_User] AS [t1]
    WHERE ([t0].[UserId] = [t1].[UserId]) AND ([t1].[NickName] LIKE @p0)
    ))) AND ([t0].[NickName] LIKE @p1)

Lambda

Blog_Users
   .Where (a => a.NickName.Contains ("Friend"))
   .Except (
      Blog_Users
         .Where (a => a.NickName.Contains ("Zhao"))
   )

转载于:https://www.cnblogs.com/kimisme/p/5172334.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值