Queryable.LastOrDefault Methode

Definitie

Retourneert het laatste element van een reeks of een standaardwaarde als er geen element wordt gevonden.

Overloads

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

Retourneert het laatste element van een reeks die voldoet aan een voorwaarde of een standaardwaarde als er geen dergelijk element wordt gevonden.

LastOrDefault<TSource>(IQueryable<TSource>)

Retourneert het laatste element in een reeks of een standaardwaarde als de reeks geen elementen bevat.

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

Retourneert het laatste element van een reeks die voldoet aan een voorwaarde of een standaardwaarde als er geen dergelijk element wordt gevonden.

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);
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

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IQueryable<TSource>

Een IQueryable<T> om een element van te retourneren.

predicate
Expression<Func<TSource,Boolean>>

Een functie om elk element voor een voorwaarde te testen.

Retouren

TSource

default(TSource) als source deze leeg is of als er geen elementen aan de test in de predicaatfunctie voldoen; anders wordt het laatste element van source die test in de predicaatfunctie doorstaan.

Uitzonderingen

source of predicate is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u dit kunt gebruiken LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) door een predicaat door te geven. In de tweede aanroep van de methode is er geen element in de volgorde die voldoet aan de voorwaarde.

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].

Opmerkingen

Deze methode heeft ten minste één parameter van het type Expression<TDelegate> waarvan het typeargument een van de Func<T,TResult> typen is. Voor deze parameters kunt u een lambda-expressie doorgeven en deze wordt gecompileerd naar een Expression<TDelegate>.

De LastOrDefault<TSource>(IQueryable<TSource>) methode genereert een MethodCallExpression die zichzelf aanroept LastOrDefault<TSource>(IQueryable<TSource>) als een samengestelde algemene methode. Vervolgens wordt de MethodCallExpression methode doorgegeven aan de Execute<TResult>(Expression) methode van de IQueryProvider vertegenwoordigd door de Provider eigenschap van de source parameter.

Het querygedrag dat optreedt als gevolg van het uitvoeren van een expressiestructuur die aanroept LastOrDefault<TSource>(IQueryable<TSource>) , is afhankelijk van de implementatie van het type source parameter. Het verwachte gedrag is dat het het laatste element retourneert source dat voldoet aan de voorwaarde die is opgegeven door predicate. Het retourneert een standaardwaarde als er geen dergelijk element in sourceis.

Van toepassing op

LastOrDefault<TSource>(IQueryable<TSource>)

Retourneert het laatste element in een reeks of een standaardwaarde als de reeks geen elementen bevat.

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);
static member LastOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function LastOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IQueryable<TSource>

Een IQueryable<T> om het laatste element van te retourneren.

Retouren

TSource

default(TSource) indien source leeg, anders het laatste element in source.

Uitzonderingen

source is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u deze kunt gebruiken LastOrDefault<TSource>(IQueryable<TSource>) voor een lege matrix.

// 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]

Soms is de waarde default(TSource) niet de standaardwaarde die u wilt gebruiken als de verzameling geen elementen bevat. In plaats van het resultaat te controleren op de ongewenste standaardwaarde en deze vervolgens indien nodig te wijzigen, kunt u de DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) methode gebruiken om de standaardwaarde op te geven die u wilt gebruiken als de verzameling leeg is. Last<TSource>(IQueryable<TSource>) Roep vervolgens aan om het laatste element te verkrijgen. In het volgende codevoorbeeld worden beide technieken gebruikt om een standaardwaarde van 1 te verkrijgen als een verzameling numerieke dagen van de maand leeg is. Omdat de standaardwaarde voor een geheel getal 0 is, dat niet overeenkomt met een dag van de maand, moet de standaardwaarde worden opgegeven als 1. De eerste resultaatvariabele wordt gecontroleerd op de ongewenste standaardwaarde nadat de query is voltooid. De tweede resultaatvariabele wordt verkregen door aan te roepen DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) om een standaardwaarde van 1 op te geven.

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

Opmerkingen

De LastOrDefault<TSource>(IQueryable<TSource>) methode genereert een MethodCallExpression die zichzelf aanroept LastOrDefault<TSource>(IQueryable<TSource>) als een samengestelde algemene methode. Vervolgens wordt de MethodCallExpression methode doorgegeven aan de Execute<TResult>(Expression) methode van de IQueryProvider vertegenwoordigd door de Provider eigenschap van de source parameter.

Het querygedrag dat optreedt als gevolg van het uitvoeren van een expressiestructuur die aanroept LastOrDefault<TSource>(IQueryable<TSource>) , is afhankelijk van de implementatie van het type source parameter. Het verwachte gedrag is dat het het laatste element retourneert in source, of een standaardwaarde als source deze leeg is.

De LastOrDefault methode biedt geen manier om een standaardwaarde op te geven. Als u een andere standaardwaarde dan default(TSource)wilt opgeven, gebruikt u de DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) methode zoals beschreven in de sectie Voorbeeld.

Van toepassing op