功能:生成两个序列的并集(使用默认的相等比较器)。

命名空间: System.Linq

程序集: System.Core.dll

备注:实现此方法时使用了延迟执行。 它直接返回一个对象,该对象存储了执行操作所需的所有信息。 此方法所表示的查询不会被执行,直到调用了 GetEnumerator 方法或通过使用了 Visual C# 中的 foreach 或 Visual Basic 中的 For Each。
此方法从结果集中排除重复项。 这和 Concat<TSource> 方法(它的功能是连接两个序列)不同,后者返回输入序列中的所有元素包括重复项。
默认的相等比较器,Default ,用于比较的类型的值,它实现了 IEqualityComparer<T> 泛型接口。 若自定义数据类型比较器,您需要实现此接口,并提供您自己的 GetHashCode 和 Equals 方法。
当此方法返回的对象是枚举对象时, Union<TSource> 枚举 first 和 second 中的对象并按此顺序来生成尚未生成的每个元素。
示例

下面的代码示例演示如何使用 Union<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) 以获取两个整数的序列的并集。

using System;
using System.Collections.Generic;
using System.Linq; public class Test
{
static void Main()
{
int[] ints1 = { , , , , , , , };
int[] ints2 = { , , , , , , , }; IEnumerable<int> union = ints1.Union(ints2); foreach (int num in union)
{
Console.Write("{0} ", num);
} /*
程序运行结果:
5 3 9 7 8 6 4 1 0
*/
}
}

如果您想要自定义数据比较器,则必须实现 IEqualityComparer<T> 泛型接口。下面的代码演示如何实现此接口,并提供对 GetHashCode 和 Equals 方法的实现。

using System;
using System.Collections.Generic;
using System.Linq; public class ProductA
{
public string Name { get; set; }
public int Code { get; set; } public virtual bool MyEquals(Object obj)
{
return true;
}
} public class ProductComparer : IEqualityComparer<ProductA>
{
public bool Equals(ProductA x, ProductA y)
{
//检查比较的对象的引用是否一样
if (Object.ReferenceEquals(x, y))
return true; //检查product对象的属性的值是否相等
return x != null && y != null && x.Code.Equals(y.Code) && x.Name.Equals(y.Name);
} public int GetHashCode(ProductA obj)
{
//如果Name字段不为空,就获取它的哈希编码
int hashProductName = obj.Name == null ? : obj.Name.GetHashCode(); //获取Code字段的哈希编码
int hashProductCode = obj.Code.GetHashCode(); //计算product对象的哈希编码
return hashProductName ^ hashProductCode;
}
} public class Test
{
static void Main()
{
ProductA[] store1 =
{
new ProductA { Name = "apple", Code = },
new ProductA { Name = "orange", Code = }
};
ProductA[] store2 =
{
new ProductA { Name = "apple", Code = },
new ProductA { Name = "lemon", Code = }
}; // 从上面两个数组中获取products,并排除相同的项,
// 这里使用了自定义的比较器:ProductComparer
IEnumerable<ProductA> union = store1.Union(store2, new ProductComparer()); foreach (var product in union)
Console.WriteLine(product.Name + " " + product.Code); /*
程序运行结果:
apple 9
orange 4
lemon 12
*/
}
}

参考资料:https://msdn.microsoft.com/zh-cn/library/bb341731(v=vs.110).aspx

Enumerable.Union<TSource> 方法的更多相关文章

  1. Oracle clob列union的方法(ORA-00932)

    今天在做“站内搜索”数据抽取时,为了能将多个相似的数据库表数据合并,使用了SQL中union关键字,期望将多个单独的SQL查询结果合并到一起.每个单独的SQL都能成功执行,在union合并的过程中遇到 ...

  2. System.Linq.Enumerable 中的方法 Aggregate 函数

      语法: public static TSource Aggregate<TSource>( this IEnumerable<TSource> source, Func&l ...

  3. hibernate 不识别union解决方法

    问题: 一个表里有  1, 2           1, 3           2, 1           2, 4  现在要找第一位是1的第二位:2,3 和 第二位是1的第一位:2.然后去掉重复 ...

  4. C语言中的union使用方法

    union共用声明和共用一变量定义: "联合"是一种特殊的类,也是一种构造类型的数据结构.在一个"联合"内能够定义多种不同的数据类型. 一个被说明为该" ...

  5. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  6. C# LINQ学习笔记二:LINQ标准查询操作概述

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5801249.html,记录一下学习过程以备后续查用. “标准查询运算符”是组成语言集成查询 (LINQ) 模式 ...

  7. .NET LINQ 转换数据类型

    转换数据类型      转换方法更改输入对象的类型.      LINQ 查询中的转换运算可用于各种应用程序.下面是一些示例: Enumerable.AsEnumerable<TSource&g ...

  8. LINQ to objects遇到的小坑

    1.C#中LINQ to Objects中延迟查询的陷阱(其他类型的LINQ也基本一致) 之前在不了解LINQ延迟查询的时候,我使用下面的这种方式,将where语句的结果直接as为List<T& ...

  9. Linq之ToList

    今晚遇到一个很奇怪的事情,我已经把所有数据拿出来了,然后在后台用C#代码根据业务对数据进行处理,大抵都是用linq进行一些where.any.select的处理,中间还夹杂着两三个foreach,结果 ...

随机推荐

  1. Thinkphp5.0 的使用模型Model更新数据

    Thinkphp5.0 的使用模型Model更新数据 (1)使用update()方法进行更新数据 一.where条件写在更新数据中 (这种情况更新的数据,必须含主键) $res = User::upd ...

  2. Balanced Binary Tree (二叉树DFS)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  3. log4j-over-slf4j.jar AND slf4j-log4j12.jar 依赖冲突解决方案

    使用maven构建项目时,如果项目中有log4j的依赖,在运行程序时可能会出现在同一个类中log4j-over-slf4j.jar和 slf4j-log4j12.jar冲突的问题: 项目报错内容为: ...

  4. 11种常见sqlmap使用方法

    sqlmap是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题. 一.SQLMAP用于Access数据库注入 (1) 猜解是否能 ...

  5. mysql连接字符串,连接字段结果集

    archie2010 ${原来姹紫嫣红开遍,似这般都付与扣钉八哥} mysql连接字符串,连接字段结果集 select CONCAT('My', 'S', 'QL连接字符串') as MySql; 连 ...

  6. android开发真机调试 相关东东

    android开发真机调试 相关东东 我们做android开发的时候,可以用模拟器,也可以真机调试,但是电脑配置不高的话,模拟器,真的是慢的有的一说,所以我一直倾向于用真机调试,但是问题也就来了,模拟 ...

  7. Android 智能问答机器人的实现

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38498353 ,本文出自:[张鸿洋的博客] 今天看到一个ios写的图灵机器人,直 ...

  8. oracle-扫盲贴:存储过程实现增删改查

    原文引入:http://blog.csdn.net/yangzhawen/article/details/8617179 oracle-扫盲贴:存储过程实现增删改查 分类: oracle2013-02 ...

  9. hdoj--2187--悼念512汶川大地震遇难同胞——老人是真饿了(贪心)

     悼念512汶川大地震遇难同胞--老人是真饿了 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  10. zoj 3023 Light Bulb

    题目大意: 求L的最大值 思路: 可以想象出是一个关于人到灯泡距离x的单峰上凸函数 当光线在墙角左边的时候影子在不断增长 然后通过相似可以推出人在墙上影子的长度为:H+D*(h-H)/x 再加上地上的 ...