Sdílet prostřednictvím


Queryable.FirstOrDefault Metoda

Definice

Vrátí první prvek sekvence nebo výchozí hodnotu, pokud nebyl nalezen žádný prvek.

Přetížení

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 není nalezen žá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>, Expression<Func<TSource,Boolean>>, TSource)

Vrátí první prvek sekvence, který splňuje podmínku nebo výchozí hodnotu, pokud se takový prvek nenajde.

FirstOrDefault<TSource>(IQueryable<TSource>)

Zdroj:
Queryable.cs
Zdroj:
Queryable.cs
Zdroj:
Queryable.cs

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 elementů .source

Parametry

source
IQueryable<TSource>

Chcete-li IQueryable<T> vrátit první prvek z.

Návraty

TSource

default(TSource) pokud source je prázdný; v opačném případě první prvek v sourcesouboru .

Výjimky

source je null.

Příklady

Následující příklad kódu ukazuje, jak použít 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 default(TSource) hodnota není výchozí hodnotou, kterou chcete použít, pokud kolekce neobsahuje žádné prvky. Místo kontroly výsledku nežádoucí výchozí hodnoty a následné změny v případě potřeby můžete použít metodu DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) k určení výchozí hodnoty, kterou chcete použít, pokud je kolekce prázdná. Potom voláním First<TSource>(IQueryable<TSource>) získáte 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í výsledná proměnná se po dokončení dotazu zkontroluje pro nežádoucí výchozí hodnotu. Druhá výsledná proměnná se získá voláním DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) , které určí výchozí hodnotu 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 metodu MethodCallExpression , která představuje volání FirstOrDefault<TSource>(IQueryable<TSource>) sebe sama jako konstruovanou obecnou metodu. Pak předá MethodCallExpression metodu IQueryProviderExecute<TResult>(Expression) reprezentované Provider vlastností parametru source .

Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazů, který představuje volání FirstOrDefault<TSource>(IQueryable<TSource>) , závisí na implementaci typu parametru source . Očekávané chování je, že vrátí první prvek v sourcesouboru nebo výchozí hodnotu, pokud source je prázdná.

Metoda FirstOrDefault neposkytuje způsob, jak určit 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 popsanou DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) v části Příklad.

Platí pro

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

Zdroj:
Queryable.cs
Zdroj:
Queryable.cs
Zdroj:
Queryable.cs

Vrátí první prvek sekvence, která splňuje zadanou podmínku nebo výchozí hodnotu, pokud není nalezen žá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 elementů .source

Parametry

source
IQueryable<TSource>

An IQueryable<T> , ze které se vrátí prvek.

predicate
Expression<Func<TSource,Boolean>>

Funkce pro otestování každého prvku pro podmínku.

Návraty

TSource

default(TSource) pokud source je prázdný nebo pokud žádný prvek neprojde testem určeným nástrojem predicate; v opačném případě první prvek, source který úspěšně projde testem určeným nástrojem predicate.

Výjimky

source nebo predicate je null.

Příklady

Následující příklad kódu ukazuje, jak použít FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) předáním predikátu. V 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, který se zkompiluje do Expression<TDelegate>.

Metoda FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) vygeneruje metodu MethodCallExpression , která představuje volání FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) sebe sama jako konstruovanou obecnou metodu. Pak předá MethodCallExpression metodu IQueryProviderExecute<TResult>(Expression) reprezentované Provider vlastností parametru source .

Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazů, 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í je, že vrátí první prvek v source , který splňuje podmínku v , nebo výchozí hodnotu, predicatepokud žádný prvek nesplňuje podmínku.

Platí pro

FirstOrDefault<TSource>(IQueryable<TSource>, TSource)

Zdroj:
Queryable.cs
Zdroj:
Queryable.cs
Zdroj:
Queryable.cs

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 elementů .source

Parametry

source
IQueryable<TSource>

Chcete-li IEnumerable<T> vrátit první prvek z.

defaultValue
TSource

Výchozí hodnota, která se má vrátit, pokud je sekvence prázdná.

Návraty

TSource

defaultValue pokud source je prázdný, v opačném případě první prvek v sourcesouboru .

Výjimky

source je null.

Platí pro

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

Zdroj:
Queryable.cs
Zdroj:
Queryable.cs
Zdroj:
Queryable.cs

Vrátí první prvek sekvence, který splňuje podmínku nebo výchozí hodnotu, pokud se takový prvek nenajde.

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 elementů .source

Parametry

source
IQueryable<TSource>

An IEnumerable<T> , ze které se vrátí prvek.

predicate
Expression<Func<TSource,Boolean>>

Funkce pro otestování každého prvku 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 nástrojem predicate. V opačném případě první prvek, source který projde testem určeným nástrojem predicate.

Výjimky

source nebo predicate je null.

Platí pro