LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用
Ø 前言
LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并、取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> 接口的扩展方法,并且都是延迟加载方法,下面是使用的简单示例。
Ø 示例数据,数据表:Subject(科目表)、Score(成绩表)

1. Concat() 方法
1) 方法声明
public static IQueryable<TSource> Concat<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2);
2) 描述
合并两个数据集,不去重复,对应的 SQL 语句是 UNION ALL。
3) 示例1:获取所有科目Id 和 考试过的科目Id 列表(科目Id 可以重复)
1. C# 代码
var query = (from t1 in DbContext.Subject
select t1.SubjectId
).Concat(
from t1 in DbContext.Score
select t1.SubjectId
);
var result = query.ToList();
2. 生成SQL
SELECT
:获取所有科目Id 和 考试过的科目Id 列表(科目Id 不能重复)
1. C# 代码
var query = (from t1 in DbContext.Subject
select t1.SubjectId
).Union(
from t1 in DbContext.Score
select t1.SubjectId
);
var result = query.ToList();
2. 生成SQL
SELECT
个重载)
public static IQueryable<TSource> Intersect<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2);
public static IQueryable<TSource> Intersect<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2, IEqualityComparer<TSource> comparer);
2) 描述
取两个数据集的交集(在数据集A出现的记录,并且在数据集B也出现的记录),对应的 SQL 语句是 INTERSECT。
3) 示例1:获取考试过的科目Id
1. C# 代码
var query = (from t1 in DbContext.Subject
select t1.SubjectId
).Intersect(
from t1 in DbContext.Score
select t1.SubjectId
);
var result = query.ToList();
2. 生成SQL
SELECT
个重载)
public static IQueryable<TSource> Except<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2);
public static IQueryable<TSource> Except<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2, IEqualityComparer<TSource> comparer);
2) 描述
取两个数据集的差集(在数据集A出现的记录,在数据集B没出现的记录),对应的 SQL 语句是 EXCEPT。
3) 示例1:获取没有考试过的科目Id
1. C# 代码
var query = (from t1 in DbContext.Subject
select t1.SubjectId
).Except(
from t1 in DbContext.Score
select t1.SubjectId
);
var result = query.ToList();
2. 生成SQL
SELECT
[Except1].[SubjectId] AS [C1]
FROM (SELECT
[Extent1].[SubjectId] AS [SubjectId]
FROM [dbo].[Subject] AS [Extent1]
EXCEPT
SELECT
[Extent2].[SubjectId] AS [SubjectId]
FROM [dbo].[Score] AS [Extent2]) AS [Except1]
3. 执行结果

Ø 总结
简单测试,以备不时之需。
LINQ to SQL 中 Concat、Union、Intersect、Except 方法的使用的更多相关文章
- Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习
/*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...
- linq to sql中的自动缓存(对象跟踪)
linq to sql中,对于同一个DataContext上下文环境,根据表主键选择记录时(当然这里所指的“记录”会自动转成“对象”),如果该记录已经被select过,默认情况下会被自动缓存下来,下次 ...
- LINQ TO SQL 中的join(转帖)
http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...
- Linq to sql中使用DateDiff()
Linq to sql中使用DateDiff() 计算时间差的方法 第一种办法: from p in PurchaseLists where EntityFunctions.DiffDays(p.Cr ...
- Linq to sql中继承类映射转换问题
类型为的数据成员“Int32 VTOUID”不是类型的映射的一部分.该成员是否位于继承层次结构根节点的上方? 想躲开Linq to sql中问题限制可真是不容易: http://www.makaido ...
- 使用redis+lua实现SQL中的select intersect的效果
公众号文章地址 1.需求 业务中需要实现在两个集合中搜索数据,并返回交集. 用SQL的伪代码可以描述如下: select key from set1 where sorted_key between ...
- 转:使用linq to sql 随机取一行数据的方法
原文地址:http://outofmemory.cn/code-snippet/1760/usage-linq-to-sql-suiji-take-yixing-data-method 虽然这看来已经 ...
- LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...
- LINQ体验(8)——LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
我们继续解说LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...
随机推荐
- The 2018 ACM-ICPC Asia Qingdao Regional Contest
The 2018 ACM-ICPC Asia Qingdao Regional Contest 青岛总体来说只会3题 C #include<bits/stdc++.h> using nam ...
- Duplicate entry 'xxx' for key 'xxx'
插入数据的时候 报错,Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplic ...
- COGS 2392 2393 2395 有标号的二分图计数
有黑白关系: 枚举左部点(黑色点),然后$2^{i*(n-i)}$处理方法同:COGS 2353 2355 2356 2358 有标号的DAG计数 无关系: 发现,假设$f(i)$是一个连通块,对于一 ...
- A1006. Sign In and Sign Out
At the beginning of every day, the first person who signs in the computer room will unlock the door, ...
- 【SPOJ116】Intervals
题目大意:有 N 个区间,在区间 [a, b] 中至少取任意互不相同的 c 个整数.求在满足 N 个区间约束的情况下,至少要取多少个正整数. 题解:差分约束系统模板题. 差分约束系统是对于 N 个变量 ...
- numpy学习之前的必要数学知识:线性代数
行列式 主要内容 1.行列式的定义及性质 2.行列式的展开公式 一.行列式的定义 1.排列和逆序 排列:由n个数1,2,…,n组成的一个有序数组称为一个n级排列,n级排列共有n!个 逆序:在一个排列中 ...
- linux系统调用之进程控制
1 进程控制: fork 创建一 ...
- Day10--Python--动态传参,作用域
python的三目运算a = 10b = 20c = a if a > b else b #先判断中间的条件a > b是否成立,成立返回if前面的值,不成立返回else后面的值,也可以 c ...
- POJ 3522 Slim Span(极差最小生成树)
Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 9546 Accepted: 5076 Descrip ...
- AtomicInteger类的理解与使用
AtomicInteger类的理解与使用 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Sample1 { private stati ...