Queryable.LastOrDefault Method

定義

シーケンスの最後の要素を返します。要素が見つからない場合は既定値を返します。 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 static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
型パラメーター
TSource

要素の型ソースします。 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.

戻り値

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.

例外

source または predicatenull です。 source 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. メソッドの 2 番目の呼び出しで要素が存在しない条件を満たす、シーケンスにします。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].

注釈

このメソッドは、少なくとも 1 つのパラメーター型の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. ラムダ式で、これらのパラメーターを渡すことができますにコンパイルされると、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. これは、後、渡します、MethodCallExpressionExecute<TResult>(Expression)のメソッド、IQueryProviderによって表される、Providerのプロパティ、sourceパラメーター。It 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>)の型の実装によって異なります、sourceパラメーター。The 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によって指定された条件を満たすpredicateします。The expected behavior is that it returns the last element in source that satisfies the condition specified by predicate. このような要素が存在しない場合は、既定値を返しますsourceします。It 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 static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
型パラメーター
TSource

要素の型ソースします。 The type of the elements of source.

パラメーター
source
IQueryable<TSource>

最後の要素を返す IQueryable<T> An IQueryable<T> to return the last element of.

戻り値

source が空の場合は default(TSource)。それ以外の場合は source の最後の要素。 default(TSource) if source is empty; otherwise, the last element in source.

例外

sourcenullです。 source 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. 2 番目の結果変数が呼び出すことによって取得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. これは、後、渡します、MethodCallExpressionExecute<TResult>(Expression)のメソッド、IQueryProviderによって表される、Providerのプロパティ、sourceパラメーター。It 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>)の型の実装によって異なります、sourceパラメーター。The 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、既定値の場合は値またはsourceが空です。The 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.

適用対象