Queryable.LastOrDefault 方法

定義

傳回序列的最後一個項目;如果找不到任何項目,則傳回預設值。Returns the last element of a sequence, or a default value if no element is found.

多載

LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

傳回序列中符合條件的最後一個元素;如果找不到這類元素,則傳回預設值。Returns the last element of a sequence that satisfies a condition or a default value if no such element is found.

LastOrDefault<TSource>(IQueryable<TSource>)

傳回序列中的最後一個項目;如果序列中沒有包含任何項目,則傳回預設值。Returns the last element in a sequence, or a default value if the sequence contains no elements.

LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

傳回序列中符合條件的最後一個元素;如果找不到這類元素,則傳回預設值。Returns the last element of a sequence that satisfies a condition or a default value if no such element is found.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource LastOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate);
public static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
public static TSource? LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
static member LastOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> -> 'Source
<Extension()>
Public Function LastOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean))) As TSource

類型參數

TSource

source 項目的類型。The type of the elements of source.

參數

source
IQueryable<TSource>

傳回項目的 IQueryable<T>An IQueryable<T> to return an element from.

predicate
Expression<Func<TSource,Boolean>>

用來測試每個項目是否符合條件的函式。A function to test each element for a condition.

傳回

TSource

如果 source 是空的,或是沒有任何項目通過述詞函式中的測試,則為 default(TSource);否則為 source 中通過述詞函式之測試的最後一個項目。default(TSource) if source is empty or if no elements pass the test in the predicate function; otherwise, the last element of source that passes the test in the predicate function.

例外狀況

sourcepredicatenullsource or predicate is null.

範例

下列程式碼範例示範如何 LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) 在述詞中傳遞來使用。The following code example demonstrates how to use LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) by passing in a predicate. 在第二次呼叫方法時,序列中沒有符合條件的元素。In the second call to the method, there is no element in the sequence that satisfies the condition.

double[] numbers = { 49.6, 52.3, 51.0, 49.4, 50.2, 48.3 };

// Get the last number in the array that rounds to 50.0,
// or else the default value for type double (0.0).
double last50 =
    numbers.AsQueryable().LastOrDefault(n => Math.Round(n) == 50.0);

Console.WriteLine("The last number that rounds to 50 is {0}.", last50);

// Get the last number in the array that rounds to 40.0,
// or else the default value for type double (0.0).
double last40 =
    numbers.AsQueryable().LastOrDefault(n => Math.Round(n) == 40.0);

Console.WriteLine(
    "The last number that rounds to 40 is {0}.",
    last40 == 0.0 ? "[DOES NOT EXIST]" : last40.ToString());

/*
    This code produces the following output:

    The last number that rounds to 50 is 50.2.
    The last number that rounds to 40 is [DOES NOT EXIST].
*/
Dim numbers() As Double = {49.6, 52.3, 51.0, 49.4, 50.2, 48.3}

' Get the last number in the array that rounds to 50.0,
' or else the default value for type double (0.0).
Dim last50 As Double = _
     numbers.AsQueryable().LastOrDefault(Function(n) Math.Round(n) = 50.0)

MsgBox(String.Format("The last number that rounds to 50 is {0}.", last50))

' Get the last number in the array that rounds to 40.0,
' or else the default value for type double (0.0).
Dim last40 As Double = _
    numbers.AsQueryable().LastOrDefault(Function(n) Math.Round(n) = 40.0)

MsgBox(String.Format("The last number that rounds to 40 is {0}.", _
    IIf(last40 = 0.0, "[DOES NOT EXIST]", last40.ToString())))

'This code produces the following output:

'The last number that rounds to 50 is 50.2.
'The last number that rounds to 40 is [DOES NOT EXIST].

備註

這個方法至少有一個類型的參數 Expression<TDelegate> ,其型別引數是其中一種 Func<T,TResult> 類型。This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 針對這些參數,您可以傳入 lambda 運算式,並將其編譯為 Expression<TDelegate>For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

LastOrDefault<TSource>(IQueryable<TSource>)方法 MethodCallExpression 會產生,代表呼叫 LastOrDefault<TSource>(IQueryable<TSource>) 本身做為已建立的泛型方法。The LastOrDefault<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling LastOrDefault<TSource>(IQueryable<TSource>) itself as a constructed generic method. 然後,它會將傳遞 MethodCallExpression 給以 Execute<TResult>(Expression) 參數的屬性所表示的方法 IQueryProvider Provider sourceIt then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

執行表示呼叫的運算式樹狀架構所產生的查詢行為, LastOrDefault<TSource>(IQueryable<TSource>) 取決於參數類型的實作為 sourceThe query behavior that occurs as a result of executing an expression tree that represents calling LastOrDefault<TSource>(IQueryable<TSource>) depends on the implementation of the type of the source parameter. 預期的行為是它會傳回 source 符合所指定之條件的最後一個元素 predicateThe expected behavior is that it returns the last element in source that satisfies the condition specified by predicate. 如果中沒有這類元素,則會傳回預設值 sourceIt returns a default value if there is no such element in source.

適用於

LastOrDefault<TSource>(IQueryable<TSource>)

傳回序列中的最後一個項目;如果序列中沒有包含任何項目,則傳回預設值。Returns the last element in a sequence, or a default value if the sequence contains no elements.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource LastOrDefault(System::Linq::IQueryable<TSource> ^ source);
public static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
public static TSource? LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
static member LastOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function LastOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

類型參數

TSource

source 項目的類型。The type of the elements of source.

參數

source
IQueryable<TSource>

要傳回最後一個項目的 IQueryable<T>An IQueryable<T> to return the last element of.

傳回

TSource

如果 source 是空的,則為 default(TSource);否則為 source 中的最後一個項目。default(TSource) if source is empty; otherwise, the last element in source.

例外狀況

sourcenullsource is null.

範例

下列程式碼範例示範如何 LastOrDefault<TSource>(IQueryable<TSource>) 在空陣列上使用。The following code example demonstrates how to use LastOrDefault<TSource>(IQueryable<TSource>) on an empty array.

// Create an empty array.
string[] fruits = { };

// Get the last item in the array, or else the default
// value for type string (null).
string last = fruits.AsQueryable().LastOrDefault();

Console.WriteLine(
    String.IsNullOrEmpty(last) ? "[STRING IS NULL OR EMPTY]" : last);

/*
    This code produces the following output:

    [STRING IS NULL OR EMPTY]
*/
' Create an empty array.
Dim fruits() As String = {}

' Get the last item in the array, or else the default
' value for type string (null).
Dim last As String = fruits.AsQueryable().LastOrDefault()

MsgBox(IIf(String.IsNullOrEmpty(last), "[STRING IS NULL OR EMPTY]", last))

' This code produces the following output:
' [STRING IS NULL OR EMPTY]

default(TSource)如果集合中沒有包含任何元素,則有時候的值不是您想要使用的預設值。Sometimes the value of default(TSource) is not the default value that you want to use if the collection contains no elements. 您可以使用 DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) 方法來指定當集合是空的時,您要使用的預設值,而不是檢查不必要預設值的結果,然後在必要時進行變更。Instead of checking the result for the unwanted default value and then changing it if necessary, you can use the DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method to specify the default value that you want to use if the collection is empty. 然後,呼叫 Last<TSource>(IQueryable<TSource>) 以取得最後一個元素。Then, call Last<TSource>(IQueryable<TSource>) to obtain the last element. 下列程式碼範例會使用這兩種技術來取得預設值1,如果月份的數位天數集合是空的。The following code example uses both techniques to obtain a default value of 1 if a collection of numeric days of the month is empty. 因為整數的預設值是0,而不會對應至當月的任何日期,所以必須改為將預設值指定為1。Because the default value for an integer is 0, which does not correspond to any day of the month, the default value must be specified as 1 instead. 在查詢完成之後,會檢查第一個結果變數是否有不必要的預設值。The first result variable is checked for the unwanted default value after the query is completed. 第二個結果變數的取得方式是呼叫 DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) ,以指定預設值1。The second result variable is obtained by calling DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) to specify a default value of 1.

List<int> daysOfMonth = new List<int> { };

// Setting the default value to 1 after the query.
int lastDay1 = daysOfMonth.AsQueryable().LastOrDefault();
if (lastDay1 == 0)
{
    lastDay1 = 1;
}
Console.WriteLine("The value of the lastDay1 variable is {0}", lastDay1);

// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int lastDay2 = daysOfMonth.AsQueryable().DefaultIfEmpty(1).Last();
Console.WriteLine("The value of the lastDay2 variable is {0}", lastDay2);

/*
 This code produces the following output:

 The value of the lastDay1 variable is 1
 The value of the lastDay2 variable is 1
*/
Dim daysOfMonth As New List(Of Integer)(New Integer() {})

' Setting the default value to 1 after the query.
Dim lastDay1 As Integer = daysOfMonth.AsQueryable().LastOrDefault()
If lastDay1 = 0 Then
    lastDay1 = 1
End If
MsgBox(String.Format("The value of the lastDay1 variable is {0}", lastDay1))

' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim lastDay2 As Integer = daysOfMonth.AsQueryable().DefaultIfEmpty(1).Last()
MsgBox(String.Format("The value of the lastDay2 variable is {0}", lastDay2))

' This code produces the following output:
'
' The value of the lastDay1 variable is 1
' The value of the lastDay2 variable is 1

備註

LastOrDefault<TSource>(IQueryable<TSource>)方法 MethodCallExpression 會產生,代表呼叫 LastOrDefault<TSource>(IQueryable<TSource>) 本身做為已建立的泛型方法。The LastOrDefault<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling LastOrDefault<TSource>(IQueryable<TSource>) itself as a constructed generic method. 然後,它會將傳遞 MethodCallExpression 給以 Execute<TResult>(Expression) 參數的屬性所表示的方法 IQueryProvider Provider sourceIt then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

執行表示呼叫的運算式樹狀架構所產生的查詢行為, LastOrDefault<TSource>(IQueryable<TSource>) 取決於參數類型的實作為 sourceThe query behavior that occurs as a result of executing an expression tree that represents calling LastOrDefault<TSource>(IQueryable<TSource>) depends on the implementation of the type of the source parameter. 預期的行為是它會傳回中的最後一個元素 source ,如果是空的,則為預設值 sourceThe expected behavior is that it returns the last element in source, or a default value if source is empty.

LastOrDefault方法不提供指定預設值的方法。The LastOrDefault method does not provide a way to specify a default value. 如果您想要指定以外的預設值 default(TSource) ,請使用 DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) 範例一節中所述的方法。If you want to specify a default value other than default(TSource), use the DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method as described in the Example section.

適用於