Queryable.LastOrDefault Metod

Definition

Returnerar det sista elementet i en sekvens eller ett standardvärde om inget element hittas.

Överlagringar

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

Returnerar det sista elementet i en sekvens som uppfyller ett villkor eller ett standardvärde om inget sådant element hittas.

LastOrDefault<TSource>(IQueryable<TSource>, TSource)

Returnerar det sista elementet i en sekvens eller ett standardvärde om sekvensen inte innehåller några element.

LastOrDefault<TSource>(IQueryable<TSource>)

Returnerar det sista elementet i en sekvens eller ett standardvärde om sekvensen inte innehåller några element.

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

Returnerar det sista elementet i en sekvens som uppfyller ett villkor eller ett standardvärde om inget sådant element hittas.

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

Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs

Returnerar det sista elementet i en sekvens som uppfyller ett villkor eller ett standardvärde om inget sådant element hittas.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
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
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
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

Typparametrar

TSource

Typen av element sourcei .

Parametrar

source
IQueryable<TSource>

Ett IQueryable<T> att returnera ett element från.

predicate
Expression<Func<TSource,Boolean>>

En funktion för att testa varje element för ett villkor.

Returer

TSource

default(TSource) om source är tom eller om inga element klarar testet i predikatfunktionen, annars är det sista elementet source i som klarar testet i predikatfunktionen.

Attribut

Undantag

source eller predicate är null.

Exempel

Följande kodexempel visar hur du använder LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) genom att skicka in ett predikat. I det andra anropet till metoden finns det inget element i sekvensen som uppfyller villkoret.

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

Kommentarer

Den här metoden har minst en parameter av typen Expression<TDelegate> vars typargument är en av typerna Func<T,TResult> . För dessa parametrar kan du skicka ett lambda-uttryck och kompileras till en Expression<TDelegate>.

Metoden LastOrDefault<TSource>(IQueryable<TSource>) genererar en MethodCallExpression som representerar att anropa LastOrDefault<TSource>(IQueryable<TSource>) sig själv som en konstruerad generisk metod. Den skickar sedan till MethodCallExpression metoden för den Execute<TResult>(Expression) som representeras av IQueryProvider egenskapen för parameternProvider.source

Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop LastOrDefault<TSource>(IQueryable<TSource>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det returnerar det sista elementet i source som uppfyller villkoret som anges av predicate. Det returnerar ett standardvärde om det inte finns något sådant element i source.

Gäller för

LastOrDefault<TSource>(IQueryable<TSource>, TSource)

Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs

Returnerar det sista elementet i en sekvens eller ett standardvärde om sekvensen inte innehåller några element.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource LastOrDefault(System::Linq::IQueryable<TSource> ^ source, TSource defaultValue);
public static TSource LastOrDefault<TSource>(this System.Linq.IQueryable<TSource> source, TSource defaultValue);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static TSource LastOrDefault<TSource>(this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member LastOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member LastOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
<Extension()>
Public Function LastOrDefault(Of TSource) (source As IQueryable(Of TSource), defaultValue As TSource) As TSource

Typparametrar

TSource

Typen av element sourcei .

Parametrar

source
IQueryable<TSource>

En IEnumerable<T> som returnerar det sista elementet i.

defaultValue
TSource

Standardvärdet som returneras om sekvensen är tom.

Returer

TSource

defaultValue om källsekvensen är tom; annars är det sista elementet i IEnumerable<T>.

Attribut

Undantag

source är null.

Gäller för

LastOrDefault<TSource>(IQueryable<TSource>)

Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs

Returnerar det sista elementet i en sekvens eller ett standardvärde om sekvensen inte innehåller några element.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static TSource? LastOrDefault<TSource>(this System.Linq.IQueryable<TSource> source);
static member LastOrDefault : System.Linq.IQueryable<'Source> -> 'Source
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member LastOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function LastOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

Typparametrar

TSource

Typen av element sourcei .

Parametrar

source
IQueryable<TSource>

En IQueryable<T> som returnerar det sista elementet i.

Returer

TSource

default(TSource) om source är tomt, annars det sista elementet i source.

Attribut

Undantag

source är null.

Exempel

Följande kodexempel visar hur du använder LastOrDefault<TSource>(IQueryable<TSource>) på en tom matris.

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

Ibland är värdet default(TSource) för inte det standardvärde som du vill använda om samlingen inte innehåller några element. I stället för att kontrollera resultatet för det oönskade standardvärdet och sedan ändra det om det behövs kan du använda DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metoden för att ange det standardvärde som du vill använda om samlingen är tom. Last<TSource>(IQueryable<TSource>) Anropa sedan för att hämta det sista elementet. I följande kodexempel används båda metoderna för att få ett standardvärde på 1 om en samling numeriska dagar i månaden är tom. Eftersom standardvärdet för ett heltal är 0, vilket inte motsvarar någon dag i månaden, måste standardvärdet anges som 1 i stället. Den första resultatvariabeln kontrolleras för det oönskade standardvärdet när frågan har slutförts. Den andra resultatvariabeln hämtas genom att anropa DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) för att ange standardvärdet 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

Kommentarer

Metoden LastOrDefault<TSource>(IQueryable<TSource>) genererar en MethodCallExpression som representerar att anropa LastOrDefault<TSource>(IQueryable<TSource>) sig själv som en konstruerad generisk metod. Den skickar sedan till MethodCallExpression metoden för den Execute<TResult>(Expression) som representeras av IQueryProvider egenskapen för parameternProvider.source

Frågebeteendet som uppstår till följd av att ett uttrycksträd som representerar anrop LastOrDefault<TSource>(IQueryable<TSource>) körs beror på implementeringen av source parametertypen. Det förväntade beteendet är att det returnerar det sista elementet i source, eller ett standardvärde om source det är tomt.

Metoden LastOrDefault ger inget sätt att ange ett standardvärde. Om du vill ange ett annat standardvärde än default(TSource)använder du metoden DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) enligt beskrivningen i avsnittet Exempel.

Gäller för

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

Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs
Källa:
Queryable.cs

Returnerar det sista elementet i en sekvens som uppfyller ett villkor eller ett standardvärde om inget sådant element hittas.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource LastOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate, TSource defaultValue);
public static TSource LastOrDefault<TSource>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static TSource LastOrDefault<TSource>(this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);
static member LastOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> * 'Source -> 'Source
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member LastOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> * 'Source -> 'Source
<Extension()>
Public Function LastOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean)), defaultValue As TSource) As TSource

Typparametrar

TSource

Typen av element sourcei .

Parametrar

source
IQueryable<TSource>

Ett IEnumerable<T> att returnera ett element från.

predicate
Expression<Func<TSource,Boolean>>

En funktion för att testa varje element för ett villkor.

defaultValue
TSource

Standardvärdet som returneras om sekvensen är tom.

Returer

TSource

defaultValue om sekvensen är tom eller om inga element klarar testet i predikatfunktionen. annars är det sista elementet som klarar testet i predikatfunktionen.

Attribut

Undantag

source eller predicate är null.

Gäller för