Queryable.LastOrDefault Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает последний элемент последовательности или значение по умолчанию, если элемент не найден.
Перегрузки
| Имя | Описание |
|---|---|
| LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) |
Возвращает последний элемент последовательности, удовлетворяющей условию или значению по умолчанию, если такой элемент не найден. |
| LastOrDefault<TSource>(IQueryable<TSource>, TSource) |
Возвращает последний элемент последовательности или значение по умолчанию, если последовательность не содержит элементов. |
| LastOrDefault<TSource>(IQueryable<TSource>) |
Возвращает последний элемент последовательности или значение по умолчанию, если последовательность не содержит элементов. |
| LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Возвращает последний элемент последовательности, удовлетворяющей условию или значению по умолчанию, если такой элемент не найден. |
LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
Возвращает последний элемент последовательности, удовлетворяющей условию или значению по умолчанию, если такой элемент не найден.
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
Параметры типа
- TSource
Тип элементов source.
Параметры
- source
- IQueryable<TSource>
Объект IQueryable<T> , из который возвращается элемент.
- predicate
- Expression<Func<TSource,Boolean>>
Функция для проверки каждого элемента для условия.
Возвращаемое значение
default(TSource) Значение , если source элементы не передают тест в функции предиката; в противном случае последний элемент source , который передает тест в функции предиката.
- Атрибуты
Исключения
source или predicate есть null.
Примеры
В следующем примере кода показано, как использовать LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) путем передачи предиката. Во втором вызове метода элемент в последовательности, удовлетворяющей условию, отсутствует.
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> типов. Для этих параметров можно передать лямбда-выражение и скомпилировать его в Expression<TDelegate>лямбда-выражение.
Метод LastOrDefault<TSource>(IQueryable<TSource>) создает объект MethodCallExpression , представляющий LastOrDefault<TSource>(IQueryable<TSource>) себя как созданный универсальный метод. Затем он передает MethodCallExpressionExecute<TResult>(Expression) метод IQueryProvider метода, представленного Provider свойством source параметра.
Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов LastOrDefault<TSource>(IQueryable<TSource>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в том, что он возвращает последний элемент, удовлетворяющий source условию, заданному predicate. Он возвращает значение по умолчанию, если в нем нет такого элемента source.
Применяется к
LastOrDefault<TSource>(IQueryable<TSource>, TSource)
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
Возвращает последний элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
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
Параметры типа
- TSource
Тип элементов source.
Параметры
- source
- IQueryable<TSource>
Значение, IEnumerable<T> возвращаемое последним элементом.
- defaultValue
- TSource
Значение по умолчанию, возвращаемое, если последовательность пуста.
Возвращаемое значение
defaultValue Значение , если исходная последовательность пуста; в противном случае последний элемент в элементе IEnumerable<T>.
- Атрибуты
Исключения
source равно null.
Применяется к
LastOrDefault<TSource>(IQueryable<TSource>)
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
Возвращает последний элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.
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
Параметры типа
- TSource
Тип элементов source.
Параметры
- source
- IQueryable<TSource>
Значение, IQueryable<T> возвращаемое последним элементом.
Возвращаемое значение
- Атрибуты
Исключения
source равно null.
Примеры
В следующем примере кода показано, как использовать LastOrDefault<TSource>(IQueryable<TSource>) в пустом массиве.
// 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) по умолчанию, которое требуется использовать, если коллекция не содержит элементов. Вместо проверки результата для нежелательного значения по умолчанию и изменения его при необходимости можно использовать DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) метод, чтобы указать значение по умолчанию, которое необходимо использовать, если коллекция пуста. Затем вызовите Last<TSource>(IQueryable<TSource>) , чтобы получить последний элемент. В следующем примере кода используются оба метода для получения значения по умолчанию 1, если коллекция числовых дней месяца пуста. Так как значение по умолчанию для целого числа равно 0, которое не соответствует ни одному дню месяца, значение по умолчанию должно быть указано как 1. Первая переменная результата проверяется на нежелательное значение по умолчанию после завершения запроса. Вторая переменная результата получается путем вызова DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) для указания значения по умолчанию 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>) себя как созданный универсальный метод. Затем он передает MethodCallExpressionExecute<TResult>(Expression) метод IQueryProvider метода, представленного Provider свойством source параметра.
Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов LastOrDefault<TSource>(IQueryable<TSource>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в том, что он возвращает последний элемент или sourceзначение по умолчанию, если source пусто.
Метод LastOrDefault не предоставляет способ указания значения по умолчанию. Если вы хотите указать значение по умолчанию, отличное default(TSource)от этого, используйте DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) метод, как описано в разделе "Пример".
Применяется к
LastOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
Возвращает последний элемент последовательности, удовлетворяющей условию или значению по умолчанию, если такой элемент не найден.
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
Параметры типа
- TSource
Тип элементов source.
Параметры
- source
- IQueryable<TSource>
Объект IEnumerable<T> , из который возвращается элемент.
- predicate
- Expression<Func<TSource,Boolean>>
Функция для проверки каждого элемента для условия.
- defaultValue
- TSource
Значение по умолчанию, возвращаемое, если последовательность пуста.
Возвращаемое значение
- Атрибуты
Исключения
source или predicate есть null.