Ø  前言

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 方法的使用的更多相关文章

  1. Linq无聊练习系列6--Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习

    /*********************Any/All/Contains/Concat/Union/Intersect/Except/take/skip/SqlMethods操作练习******* ...

  2. linq to sql中的自动缓存(对象跟踪)

    linq to sql中,对于同一个DataContext上下文环境,根据表主键选择记录时(当然这里所指的“记录”会自动转成“对象”),如果该记录已经被select过,默认情况下会被自动缓存下来,下次 ...

  3. LINQ TO SQL 中的join(转帖)

    http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...

  4. Linq to sql中使用DateDiff()

    Linq to sql中使用DateDiff() 计算时间差的方法 第一种办法: from p in PurchaseLists where EntityFunctions.DiffDays(p.Cr ...

  5. Linq to sql中继承类映射转换问题

    类型为的数据成员“Int32 VTOUID”不是类型的映射的一部分.该成员是否位于继承层次结构根节点的上方? 想躲开Linq to sql中问题限制可真是不容易: http://www.makaido ...

  6. 使用redis+lua实现SQL中的select intersect的效果

    公众号文章地址 1.需求 业务中需要实现在两个集合中搜索数据,并返回交集. 用SQL的伪代码可以描述如下: select key from set1 where sorted_key between ...

  7. 转:使用linq to sql 随机取一行数据的方法

    原文地址:http://outofmemory.cn/code-snippet/1760/usage-linq-to-sql-suiji-take-yixing-data-method 虽然这看来已经 ...

  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 ...

  9. 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 ...

随机推荐

  1. luogu3621 城池攻占 (倍增)

    好像所有人都写的左偏树 但我不会啊233 首先发现乘的时候 系数不会为负,所以能得到一个关键条件:变化后的战斗力随变化前的战斗力大小单调 所以我们考虑倍增 设hp[x][i]是从x开始一路攻克$2^i ...

  2. UVALive - 4222

    题目链接:https://vjudge.net/contest/244167#problem/D 题目: For a dance to be proper in the Altered Culture ...

  3. 普及一个Linux的小技能~Ctrl+Z切换到后台运行

    逆天Linux一直是自己摸索的,几年下来也小有心得,前不久PC也换成Ubuntu了,但毕竟不是专门搞运维的,有些知识还是有死角 这不,今天发现了个小技巧,来和大家分享一下: 比如运行一个交互式的程序: ...

  4. CSS解决文字超出显示省略号问题

    超出一行 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 超出多行 overflow: hidden; text-ove ...

  5. A1072. Gas Station

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  6. 【Asia Yokohama Regional Contest 2018】Arithmetic Progressions

    题目大意:给定 N(1<N<=5000) 个不同元素组成的集合,求从中选出若干数字组成的等差数列最长是多少. 题解:直接暴力有 \(O(n^3)\) 的算法,即:枚举等差数列的前两个值,再 ...

  7. 利用sqlalchemy读取数据库 和pandas的Dataframe对象 互相生成

    #导入pandas import pandas as pd import numpy as np #导入SqlAlchemy from sqlalchemy import create_engine ...

  8. postman 请求带cookie

    以亚马逊为例,我抓包随便看一个返回是json数据格式的一个接口,比如随便点一个,我的订单 随便找一条,然后复制url过滤 右键,copy下url 将url放入filter过滤: 在postman里面, ...

  9. alias命令使用

    alias 别名 增加别名 alias vi=vim alias api='sudo apt-get install' alias apr='sudo apt-get remove' alias tz ...

  10. springmvc 学习笔记

    @Autowired,@RequestMapping,@RequestParam 使用该注解,引入对象时, 可以省略setter getter.减少代码显示. @AutowiredSimService ...