LINQ Set操作

集合操作

在四个操作符的集合操作中,每个产生基于不同的标准的结果。

操作 描述 C# 查询表达式语法 VB查询表达式语法
去重 结果:从集合唯一值的列表通过过滤重复的数据,如果有任何结果 不适用 不同的
除外 比较了两个集合的值,并返回从一个集合不在另外一个集合 不适用 不适用
相交 返回集合在两个不同的集合相同的相同部分 不适用 不适用
联合 联合了两种不同内容的集合到一个列表太没有任何重复的内容 不适用 不适用

DISTICT的例子 - 查询表达式

VB

Module Module1
  Sub Main()
     Dim classGrades = New System.Collections.Generic.List(Of Integer) From {63, 68, 71, 75, 68, 92, 75}

     Dim distinctQuery = From grade In classGrades
                         Select grade Distinct

     Dim sb As New System.Text.StringBuilder("The distinct grades are: ")
     For Each number As Integer In distinctQuery
           sb.Append(number & " ")
     Next

     MsgBox(sb.ToString())
  End Sub
End Module

当上述代码被编译和执行时,它产生了以下结果:

The distinct grades are: 63 68 71 75 92

Except例子 - Enumerable.Except方法

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators
{
  class Program
  {
     static void Main(string[] args)
     {
        double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
        double[] numbers2 = { 2.2 };

        IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);

        foreach (double number in onlyInFirstSet)
           Console.WriteLine(number);
           Console.ReadLine();
     }
  }
}

VB

Module Module1
  Sub Main()
     Dim numbers1() As Double = {2.0, 2.1, 2.2, 2.3, 2.4, 2.5}
     Dim numbers2() As Double = {2.2}

     Dim onlyInFirstSet As IEnumerable(Of Double) = numbers1.Except(numbers2)

     Dim output As New System.Text.StringBuilder
     For Each number As Double In onlyInFirstSet
        output.AppendLine(number)
        Console.WriteLine(number)
     Next
     Console.ReadLine()
     
  End Sub
End Module

当C#或VB的上述代码被编译和执行时,它产生了以下结果:

2
2.1
2.3
2.4
2.5

Intersect(相交)例子- Enumerable.Intersect方法

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators
{
  class Program
  {
     static void Main(string[] args)
     {
        int[] id1 = { 44, 26, 92, 30, 71, 38 };
        int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

        IEnumerable<int> both = id1.Intersect(id2);

        foreach (int id in both)
           Console.WriteLine(id);
           Console.ReadLine();
     }
  }
}

VB

Module Module1
  Sub Main()
   
     Dim id1() As Integer = {44, 26, 92, 30, 71, 38}
     Dim id2() As Integer = {39, 59, 83, 47, 26, 4, 30}

     Dim intersection As IEnumerable(Of Integer) = id1.Intersect(id2)

     Dim output As New System.Text.StringBuilder
     For Each id As Integer In intersection
        output.AppendLine(id)
        Console.WriteLine(id)
     Next
     
     Console.ReadLine()
     
  End Sub
End Module

当C#或VB的上述代码被编译和执行时,它产生了以下结果:

26
30

Union例子- Enumerable.Union方法

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Operators
{
  class Program
  {
     static void Main(string[] args)
     {
        int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
        int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };

        IEnumerable<int> union = ints1.Union(ints2);

        foreach (int num in union)
        {
           Console.Write("{0} ", num);
           Console.Write("\n");
        }
        Console.ReadLine();
     }
  }
}

VB

Module Module1
  Sub Main()
     Dim ints1() As Integer = {5, 3, 9, 7, 5, 9, 3, 7}
     Dim ints2() As Integer = {8, 3, 6, 4, 4, 9, 1, 0}

     Dim union As IEnumerable(Of Integer) = ints1.Union(ints2)

     Dim output As New System.Text.StringBuilder
     For Each num As Integer In union
        output.AppendLine(num & " ")
        Console.WriteLine(num & " ")
     Next
     
     Console.ReadLine()
  End Sub
End Module

当C#或VB上述代码被编译和执行时,它产生了以下结果:

5
3 
9 
7 
8 
6 
4 
1 
0

上一篇: LINQ生成操作 下一篇: LINQ相等