Queryable.FirstOrDefault Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí první prvek sekvence nebo výchozí hodnotu, pokud nebyl nalezen žádný prvek.
Přetížení
FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Vrátí první prvek sekvence, která splňuje podmínku nebo výchozí hodnotu, pokud se nenajde žádný takový prvek. |
FirstOrDefault<TSource>(IQueryable<TSource>, TSource) |
Vrátí první prvek sekvence nebo výchozí hodnotu, pokud sekvence neobsahuje žádné prvky. |
FirstOrDefault<TSource>(IQueryable<TSource>) |
Vrátí první prvek sekvence nebo výchozí hodnotu, pokud sekvence neobsahuje žádné prvky. |
FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) |
Vrátí první prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud se nenajde žádný takový prvek. |
FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
Vrátí první prvek sekvence, která splňuje podmínku nebo výchozí hodnotu, pokud se nenajde žádný takový prvek.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate, TSource defaultValue);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);
static member FirstOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> * 'Source -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean)), defaultValue As TSource) As TSource
Parametry typu
- TSource
Typ prvků .source
Parametry
- source
- IQueryable<TSource>
Návrat IEnumerable<T> prvku z.
- predicate
- Expression<Func<TSource,Boolean>>
Funkce k otestování jednotlivých prvků pro podmínku
- defaultValue
- TSource
Výchozí hodnota, která se má vrátit, pokud je sekvence prázdná.
Návraty
- TSource
defaultValue
pokud source
je prázdný nebo pokud žádný prvek neprojde testem určeným predicate
; jinak první prvek, který source
projde testem určeným predicate
.
Výjimky
source
nebo predicate
je null
.
Platí pro
FirstOrDefault<TSource>(IQueryable<TSource>, TSource)
Vrátí první prvek sekvence nebo výchozí hodnotu, pokud sekvence neobsahuje žádné prvky.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source, TSource defaultValue);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member FirstOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource), defaultValue As TSource) As TSource
Parametry typu
- TSource
Typ prvků .source
Parametry
- source
- IQueryable<TSource>
Vrátí IEnumerable<T> první prvek.
- defaultValue
- TSource
Výchozí hodnota, která se má vrátit, pokud je sekvence prázdná.
Návraty
- TSource
defaultValue
pokud source
je prázdný; jinak první prvek v source
souboru .
Výjimky
source
je null
.
Platí pro
FirstOrDefault<TSource>(IQueryable<TSource>)
Vrátí první prvek sekvence nebo výchozí hodnotu, pokud sekvence neobsahuje žádné prvky.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
public static TSource? FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
static member FirstOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource
Parametry typu
- TSource
Typ prvků .source
Parametry
- source
- IQueryable<TSource>
Vrátí IQueryable<T> první prvek.
Návraty
- TSource
default
(TSource
) pokud source
je prázdný; jinak první prvek v source
.
Výjimky
source
je null
.
Příklady
Následující příklad kódu ukazuje, jak používat FirstOrDefault<TSource>(IQueryable<TSource>) v prázdné sekvenci.
// Create an empty array.
int[] numbers = { };
// Get the first item in the array, or else the
// default value for type int (0).
int first = numbers.AsQueryable().FirstOrDefault();
Console.WriteLine(first);
/*
This code produces the following output:
0
*/
' Create an empty array.
Dim numbers() As Integer = {}
' Get the first item in the array, or else the
' default value for type int, which is 0.
Dim first As Integer = numbers.AsQueryable().FirstOrDefault()
MsgBox(first)
' This code produces the following output:
' 0
Někdy hodnota není výchozí hodnotou default(TSource)
, kterou chcete použít, pokud kolekce neobsahuje žádné prvky. Místo kontroly výsledku nežádoucí výchozí hodnoty a v případě potřeby ji můžete změnit pomocí DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metody k určení výchozí hodnoty, kterou chcete použít, pokud je kolekce prázdná. Potom zavolejte First<TSource>(IQueryable<TSource>) , abyste získali první prvek. Následující příklad kódu používá obě techniky k získání výchozí hodnoty 1, pokud je kolekce číselných měsíců prázdná. Vzhledem k tomu, že výchozí hodnota pro celé číslo je 0, což neodpovídá žádnému měsíci, musí být výchozí hodnota zadána jako 1. První proměnná výsledku je po dokončení dotazu zaškrtnutá pro nežádoucí výchozí hodnotu. Druhá výsledná proměnná se získá voláním DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) k určení výchozí hodnoty 1.
List<int> months = new List<int> { };
// Setting the default value to 1 after the query.
int firstMonth1 = months.AsQueryable().FirstOrDefault();
if (firstMonth1 == 0)
{
firstMonth1 = 1;
}
Console.WriteLine("The value of the firstMonth1 variable is {0}", firstMonth1);
// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int firstMonth2 = months.AsQueryable().DefaultIfEmpty(1).First();
Console.WriteLine("The value of the firstMonth2 variable is {0}", firstMonth2);
/*
This code produces the following output:
The value of the firstMonth1 variable is 1
The value of the firstMonth2 variable is 1
*/
Dim months As New List(Of Integer)(New Integer() {})
' Setting the default value to 1 after the query.
Dim firstMonth1 As Integer = months.AsQueryable().FirstOrDefault()
If firstMonth1 = 0 Then
firstMonth1 = 1
End If
MsgBox(String.Format("The value of the firstMonth1 variable is {0}", firstMonth1))
' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim firstMonth2 As Integer = months.AsQueryable().DefaultIfEmpty(1).First()
MsgBox(String.Format("The value of the firstMonth2 variable is {0}", firstMonth2))
' This code produces the following output:
'
' The value of the firstMonth1 variable is 1
' The value of the firstMonth2 variable is 1
Poznámky
Metoda FirstOrDefault<TSource>(IQueryable<TSource>) vygeneruje MethodCallExpression volání FirstOrDefault<TSource>(IQueryable<TSource>) jako vytvořenou obecnou metodu. Pak předá MethodCallExpression metodu IQueryProvider Execute<TResult>(Expression) reprezentované Provider vlastností parametrusource
.
Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazu, který představuje volání FirstOrDefault<TSource>(IQueryable<TSource>) , závisí na implementaci typu parametru source
. Očekávané chování spočívá v tom, že vrátí první prvek v source
, nebo výchozí hodnotu, pokud source
je prázdná.
Metoda FirstOrDefault neposkytuje způsob, jak zadat výchozí hodnotu, která se má vrátit, pokud source
je prázdná. Pokud chcete zadat jinou výchozí hodnotu než default(TSource)
, použijte metodu DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) popsanou v části Příklad.
Platí pro
FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
Vrátí první prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud se nenajde žádný takový prvek.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
public static TSource? FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
static member FirstOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean))) As TSource
Parametry typu
- TSource
Typ prvků .source
Parametry
- source
- IQueryable<TSource>
Návrat IQueryable<T> prvku z.
- predicate
- Expression<Func<TSource,Boolean>>
Funkce k otestování jednotlivých prvků pro podmínku
Návraty
- TSource
default
(TSource
) je-li source
prázdný nebo není-li žádný prvek projde test určený predicate
; jinak první prvek, který source
projde testem určeným predicate
.
Výjimky
source
nebo predicate
je null
.
Příklady
Následující příklad kódu ukazuje použití FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) předáním predikátu. Ve druhém dotazu není v sekvenci žádný prvek, který splňuje podmínku.
string[] names = { "Hartono, Tommy", "Adams, Terry",
"Andersen, Henriette Thaulow",
"Hedlund, Magnus", "Ito, Shu" };
// Get the first string in the array that is longer
// than 20 characters, or the default value for type
// string (null) if none exists.
string firstLongName =
names.AsQueryable().FirstOrDefault(name => name.Length > 20);
Console.WriteLine("The first long name is '{0}'.", firstLongName);
// Get the first string in the array that is longer
// than 30 characters, or the default value for type
// string (null) if none exists.
string firstVeryLongName =
names.AsQueryable().FirstOrDefault(name => name.Length > 30);
Console.WriteLine(
"There is {0} name that is longer than 30 characters.",
string.IsNullOrEmpty(firstVeryLongName) ? "NOT a" : "a");
/*
This code produces the following output:
The first long name is 'Andersen, Henriette Thaulow'.
There is NOT a name that is longer than 30 characters.
*/
Dim names() As String = {"Hartono, Tommy", "Adams, Terry", _
"Andersen, Henriette Thaulow", _
"Hedlund, Magnus", "Ito, Shu"}
' Get the first string in the array that is longer
' than 20 characters, or the default value for type
' string (null) if none exists.
Dim firstLongName As String = _
names.AsQueryable().FirstOrDefault(Function(name) name.Length > 20)
MsgBox(String.Format("The first long name is '{0}'.", firstLongName))
' Get the first string in the array that is longer
' than 30 characters, or the default value for type
' string (null) if none exists.
Dim firstVeryLongName As String = _
names.AsQueryable().FirstOrDefault(Function(name) name.Length > 30)
MsgBox(String.Format( _
"There is {0} name that is longer than 30 characters.", _
IIf(String.IsNullOrEmpty(firstVeryLongName), "NOT a", "a")))
' This code produces the following output:
'
' The first long name is 'Andersen, Henriette Thaulow'.
' There is NOT a name that is longer than 30 characters.
Poznámky
Tato metoda má alespoň jeden parametr typu Expression<TDelegate> , jehož argument typu je jedním z Func<T,TResult> typů. Pro tyto parametry můžete předat výraz lambda a bude zkompilován do Expression<TDelegate>souboru .
Metoda FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) vygeneruje MethodCallExpression volání FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) jako vytvořenou obecnou metodu. Pak předá MethodCallExpression metodu IQueryProvider Execute<TResult>(Expression) reprezentované Provider vlastností parametrusource
.
Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazu, který představuje volání FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) , závisí na implementaci typu parametru source
. Očekávané chování spočívá v tom, že vrátí první prvek, který source
splňuje podmínku v predicate
, nebo výchozí hodnotu, pokud žádný prvek nesplňuje podmínku.