Leer en inglés

Compartir a través de


Queryable.LastOrDefault Método

Definición

Devuelve el último elemento de una secuencia o un valor predeterminado si no se encuentra ningún elemento.

Sobrecargas

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

Devuelve el último elemento de una secuencia que satisface una condición o un valor predeterminado si no se encuentra dicho elemento.

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

Devuelve el último elemento de una secuencia o un valor predeterminado si la secuencia no contiene elementos.

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

Devuelve el último elemento de una secuencia que satisface una condición o un valor predeterminado si no se encuentra dicho elemento.

LastOrDefault<TSource>(IQueryable<TSource>)

Devuelve el último elemento de una secuencia o un valor predeterminado si la secuencia no contiene elementos.

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

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

Devuelve el último elemento de una secuencia que satisface una condición o un valor predeterminado si no se encuentra dicho elemento.

C#
public static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
IQueryable<TSource>

IEnumerable<T> del que se va a devolver un elemento.

predicate
Expression<Func<TSource,Boolean>>

Función para probar cada elemento de una condición.

defaultValue
TSource

Valor predeterminado que se va a devolver si la secuencia está vacía.

Devoluciones

TSource

defaultValue si la secuencia está vacía o si ningún elemento supera la prueba en la función de predicado; de lo contrario, el último elemento que pasa la prueba en la función de predicado.

Excepciones

source o predicate es null.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET 6, 7, 8, 9

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

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

Devuelve el último elemento de una secuencia o un valor predeterminado si la secuencia no contiene elementos.

C#
public static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, TSource defaultValue);

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
IQueryable<TSource>

IEnumerable<T> del que se va a devolver el último elemento.

defaultValue
TSource

Valor predeterminado que se va a devolver si la secuencia está vacía.

Devoluciones

TSource

defaultValue si la secuencia de origen está vacía; de lo contrario, el último elemento de IEnumerable<T>.

Excepciones

source es null.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET 6, 7, 8, 9

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

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

Devuelve el último elemento de una secuencia que satisface una condición o un valor predeterminado si no se encuentra dicho elemento.

C#
public static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
C#
public static TSource? LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
IQueryable<TSource>

IQueryable<T> del que se va a devolver un elemento.

predicate
Expression<Func<TSource,Boolean>>

Función para probar cada elemento de una condición.

Devoluciones

TSource

default(TSource) si source está vacío o si ningún elemento pasa la prueba en la función de predicado; de lo contrario, el último elemento de source que pasa la prueba en la función de predicado.

Excepciones

source o predicate es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) pasando un predicado. En la segunda llamada al método , no hay ningún elemento en la secuencia que cumpla la condición.

C#
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].
*/

Comentarios

Este método tiene al menos un parámetro de tipo Expression<TDelegate> cuyo argumento de tipo es uno de los Func<T,TResult> tipos. Para estos parámetros, puede pasar una expresión lambda y se compilará en .Expression<TDelegate>

El LastOrDefault<TSource>(IQueryable<TSource>) método genera un MethodCallExpression objeto que representa llamarse LastOrDefault<TSource>(IQueryable<TSource>) a sí mismo como un método genérico construido. A continuación, pasa al MethodCallExpressionExecute<TResult>(Expression) método del IQueryProvider representado por la Provider propiedad del source parámetro .

El comportamiento de consulta que se produce como resultado de ejecutar un árbol de expresión que representa la llamada LastOrDefault<TSource>(IQueryable<TSource>) depende de la implementación del tipo del source parámetro. El comportamiento esperado es que devuelve el último elemento de source que satisface la condición especificada por predicate. Devuelve un valor predeterminado si no hay ningún elemento de este tipo en source.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

LastOrDefault<TSource>(IQueryable<TSource>)

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

Devuelve el último elemento de una secuencia o un valor predeterminado si la secuencia no contiene elementos.

C#
public static TSource LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
C#
public static TSource? LastOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);

Parámetros de tipo

TSource

Tipo de los elementos de source.

Parámetros

source
IQueryable<TSource>

IQueryable<T> del que se va a devolver el último elemento.

Devoluciones

TSource

default(TSource) si source está vacío; de lo contrario, el último elemento de source.

Excepciones

source es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar LastOrDefault<TSource>(IQueryable<TSource>) en una matriz vacía.

C#
// 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]
*/

A veces, el valor de default(TSource) no es el valor predeterminado que desea usar si la colección no contiene ningún elemento. En lugar de comprobar el resultado del valor predeterminado no deseado y, a continuación, cambiarlo si es necesario, puede usar el DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) método para especificar el valor predeterminado que desea usar si la colección está vacía. A continuación, llame Last<TSource>(IQueryable<TSource>) a para obtener el último elemento. En el ejemplo de código siguiente se usan ambas técnicas para obtener un valor predeterminado de 1 si una colección de días numéricos del mes está vacía. Dado que el valor predeterminado de un entero es 0, que no corresponde a ningún día del mes, el valor predeterminado debe especificarse como 1 en su lugar. La primera variable de resultado se comprueba para el valor predeterminado no deseado una vez completada la consulta. La segunda variable de resultado se obtiene llamando DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) a para especificar un valor predeterminado de 1.

C#
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
*/

Comentarios

El LastOrDefault<TSource>(IQueryable<TSource>) método genera un MethodCallExpression objeto que representa llamarse LastOrDefault<TSource>(IQueryable<TSource>) a sí mismo como un método genérico construido. A continuación, pasa al MethodCallExpressionExecute<TResult>(Expression) método del IQueryProvider representado por la Provider propiedad del source parámetro .

El comportamiento de consulta que se produce como resultado de ejecutar un árbol de expresión que representa la llamada LastOrDefault<TSource>(IQueryable<TSource>) depende de la implementación del tipo del source parámetro. El comportamiento esperado es que devuelve el último elemento de sourceo un valor predeterminado si source está vacío.

El LastOrDefault método no proporciona una manera de especificar un valor predeterminado. Si desea especificar un valor predeterminado distinto default(TSource)de , use el DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) método como se describe en la sección Ejemplo.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0