# Queryable.SequenceEqual 方法

## 重载

 SequenceEqual(IQueryable, IEnumerable) 通过使用默认的相等比较器比较元素以确定两个序列是否相等。Determines whether two sequences are equal by using the default equality comparer to compare elements. SequenceEqual(IQueryable, IEnumerable, IEqualityComparer) 通过使用指定的 IEqualityComparer 比较元素以确定两个序列是否相等。Determines whether two sequences are equal by using a specified IEqualityComparer to compare elements.

## SequenceEqual<TSource>(IQueryable<TSource>, IEnumerable<TSource>)

``````public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static bool SequenceEqual(System::Linq::IQueryable<TSource> ^ source1, System::Collections::Generic::IEnumerable<TSource> ^ source2);``````
``public static bool SequenceEqual<TSource> (this System.Linq.IQueryable<TSource> source1, System.Collections.Generic.IEnumerable<TSource> source2);``
``static member SequenceEqual : System.Linq.IQueryable<'Source> * seq<'Source> -> bool``
``````<Extension()>
Public Function SequenceEqual(Of TSource) (source1 As IQueryable(Of TSource), source2 As IEnumerable(Of TSource)) As Boolean``````

TSource

#### 参数

source1
IQueryable<TSource>

source2
IEnumerable<TSource>

#### 异常

`source1``source2``null``source1` or `source2` is `null`.

### 示例

``````class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}

public static void SequenceEqualEx1()
{
Pet pet1 = new Pet { Name = "Turbo", Age = 2 };
Pet pet2 = new Pet { Name = "Peanut", Age = 8 };

// Create two lists of pets.
List<Pet> pets1 = new List<Pet> { pet1, pet2 };
List<Pet> pets2 = new List<Pet> { pet1, pet2 };

// Determine if the lists are equal.
bool equal = pets1.AsQueryable().SequenceEqual(pets2);

Console.WriteLine(
"The lists {0} equal.",
equal ? "are" : "are not");
}

/*
This code produces the following output:

The lists are equal.
*/

``````
``````Class Pet
Public Name As String
Public Age As Integer
End Class

Shared Sub SequenceEqualEx1()
Dim pet1 As New Pet With {.Name = "Turbo", .Age = 2}
Dim pet2 As New Pet With {.Name = "Peanut", .Age = 8}

' Create two lists of pets.
Dim pets1 As New List(Of Pet)(New Pet() {pet1, pet2})
Dim pets2 As New List(Of Pet)(New Pet() {pet1, pet2})

' Determine if the lists are equal.
Dim equal As Boolean = pets1.AsQueryable().SequenceEqual(pets2)

' Display the output.
Dim text As String = IIf(equal, "are", "are not")
MsgBox("The lists " & text & " equal.")
End Sub

'This code produces the following output:

'The lists are equal.

``````

``````class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}

public static void SequenceEqualEx2()
{
Pet pet1 = new Pet() { Name = "Turbo", Age = 2 };
Pet pet2 = new Pet() { Name = "Peanut", Age = 8 };

// Create two lists of pets.
List<Pet> pets1 = new List<Pet> { pet1, pet2 };
List<Pet> pets2 = new List<Pet> {
new Pet { Name = "Turbo", Age = 2 },
new Pet { Name = "Peanut", Age = 8 }
};

// Determine if the lists are equal.
bool equal = pets1.AsQueryable().SequenceEqual(pets2);

Console.WriteLine("The lists {0} equal.", equal ? "are" : "are NOT");
}

/*
This code produces the following output:

The lists are NOT equal.
*/

``````
``````Class Pet
Public Name As String
Public Age As Integer
End Class

Shared Sub SequenceEqualEx2()
Dim pet1 As New Pet With {.Name = "Turbo", .Age = 2}
Dim pet2 As New Pet With {.Name = "Peanut", .Age = 8}

' Create two lists of pets.
Dim pets1 As New List(Of Pet)()

Dim pets2 As New List(Of Pet)()
pets2.Add(New Pet With {.Name = "Turbo", .Age = 2})
pets2.Add(New Pet With {.Name = "Peanut", .Age = 8})

' Determine if the lists are equal.
Dim equal As Boolean = pets1.AsQueryable().SequenceEqual(pets2)

' Display the output.
Dim text As String = IIf(equal, "are", "are not")
MsgBox("The lists " & text & " equal.")
End Sub

' This code produces the following output:

' The lists are not equal.

``````

### 注解

The SequenceEqual<TSource>(IQueryable<TSource>, IEnumerable<TSource>) method generates a MethodCallExpression that represents calling SequenceEqual<TSource>(IQueryable<TSource>, IEnumerable<TSource>) itself as a constructed generic method. 然后，它将 MethodCallExpression 传递到 IQueryProviderExecute<TResult>(Expression) 方法（由 `source1` 参数的 Provider 属性表示）。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the `source1` parameter.

## SequenceEqual<TSource>(IQueryable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)

``````public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static bool SequenceEqual(System::Linq::IQueryable<TSource> ^ source1, System::Collections::Generic::IEnumerable<TSource> ^ source2, System::Collections::Generic::IEqualityComparer<TSource> ^ comparer);``````
``public static bool SequenceEqual<TSource> (this System.Linq.IQueryable<TSource> source1, System.Collections.Generic.IEnumerable<TSource> source2, System.Collections.Generic.IEqualityComparer<TSource> comparer);``
``static member SequenceEqual : System.Linq.IQueryable<'Source> * seq<'Source> * System.Collections.Generic.IEqualityComparer<'Source> -> bool``
``````<Extension()>
Public Function SequenceEqual(Of TSource) (source1 As IQueryable(Of TSource), source2 As IEnumerable(Of TSource), comparer As IEqualityComparer(Of TSource)) As Boolean``````

TSource

#### 参数

source1
IQueryable<TSource>

source2
IEnumerable<TSource>

comparer
IEqualityComparer<TSource>

#### 异常

`source1``source2``null``source1` or `source2` is `null`.

### 注解

The SequenceEqual<TSource>(IQueryable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) method generates a MethodCallExpression that represents calling SequenceEqual<TSource>(IQueryable<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>) itself as a constructed generic method. 然后，它将 MethodCallExpression 传递到 IQueryProviderExecute<TResult>(Expression) 方法（由 `source1` 参数的 Provider 属性表示）。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the `source1` parameter.