LINQ to SQL 中 ConcatUnionIntersectExcept 方法的使用

Posted Abeam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINQ to SQL 中 ConcatUnionIntersectExcept 方法的使用相关的知识,希望对你有一定的参考价值。

Ø  前言

LINQ to SQL 中需要对两个或多个数据集进行操作,比如:合并、取交集等,主要使用下面四个方法,这四个方法都是 System.Linq.IQueryable<out T> 接口的扩展方法,并且都是延迟加载方法,下面是使用的简单示例。

 

Ø  示例数据,数据表:Subject(科目表)、Score(成绩表)

clip_image001[18]

 

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

    [UnionAll1].[SubjectId] AS [C1]

    FROM  (SELECT

        [Extent1].[SubjectId] AS [SubjectId]

        FROM [dbo].[Subject] AS [Extent1]

    UNION ALL

        SELECT

        [Extent2].[SubjectId] AS [SubjectId]

        FROM [dbo].[Score] AS [Extent2]) AS [UnionAll1]

3.   执行结果

clip_image002[18]

 

2.   Union() 方法

1)   方法声明

public static IQueryable<TSource> Union<TSource>(this IQueryable<TSource> source1, IEnumerable<TSource> source2);

2)   描述

合并两个数据集,去重复,对应的 SQL 语句是 UNION ALL + DISTINCT。与想象中似乎不太一样,实际写 SQL 时,一般都会用 UNION 就好了哇。

3)   示例1:获取所有科目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

    [Distinct1].[C1] AS以上是关于LINQ to SQL 中 ConcatUnionIntersectExcept 方法的使用的主要内容,如果未能解决你的问题,请参考以下文章

Linq-to-SQL 数据库文件为空

Linq to SQL 还是 Linq to DataSet?

EF 6.x,LINQ-to-SQL和原始SQL子句

使用 SQL Server Compact Edition 的 Linq-to-SQL

Linq-to-SQL 超时

Linq-to-SQL 数据检索速度比较

(c)2006-2024 SYSTEM All Rights Reserved IT常识