Queryable.FirstOrDefault Metodo

Definizione

Restituisce il primo elemento di una sequenza o un valore predefinito se non viene trovato alcun elemento.

Overload

FirstOrDefault<TSource>(IQueryable<TSource>)

Restituisce il primo elemento di una sequenza o un valore predefinito se la sequenza non contiene elementi.

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

Restituisce il primo elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se un tale elemento non viene trovato.

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

Restituisce il primo elemento di una sequenza o un valore predefinito se la sequenza non contiene elementi.

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

Restituisce il primo elemento della sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento non viene trovato.

FirstOrDefault<TSource>(IQueryable<TSource>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Restituisce il primo elemento di una sequenza o un valore predefinito se la sequenza non contiene elementi.

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

Parametri di tipo

TSource

Tipo degli elementi di source.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> di cui restituire il primo elemento.

Restituisce

TSource

default(TSource) se source è vuota; in caso contrario, il primo elemento di source.

Eccezioni

source è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare FirstOrDefault<TSource>(IQueryable<TSource>) in una sequenza vuota.

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

A volte il valore di default(TSource) non è il valore predefinito che si vuole usare se la raccolta non contiene elementi. Anziché controllare il risultato per il valore predefinito indesiderato e modificarlo, se necessario, è possibile usare il metodo per specificare il DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) valore predefinito che si vuole usare se la raccolta è vuota. Chiamare First<TSource>(IQueryable<TSource>) quindi per ottenere il primo elemento. Nell'esempio di codice seguente vengono usate entrambe le tecniche per ottenere un valore predefinito pari a 1 se una raccolta di mesi numerici è vuota. Poiché il valore predefinito per un intero è 0, che non corrisponde a alcun mese, il valore predefinito deve essere specificato come 1. La prima variabile di risultato viene selezionata per il valore predefinito indesiderato dopo il completamento della query. La seconda variabile di risultato viene ottenuta chiamando DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) per specificare un valore predefinito pari a 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

Commenti

Il FirstOrDefault<TSource>(IQueryable<TSource>) metodo genera un MethodCallExpression oggetto che rappresenta la chiamata FirstOrDefault<TSource>(IQueryable<TSource>) stessa come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al Execute<TResult>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro.

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata FirstOrDefault<TSource>(IQueryable<TSource>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che restituisce il primo elemento in sourceo un valore predefinito se source è vuoto.

Il FirstOrDefault metodo non fornisce un modo per specificare il valore predefinito da restituire se source è vuoto. Se si vuole specificare un valore predefinito diverso da default(TSource), usare il DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metodo come descritto nella sezione Esempio.

Si applica a

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

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Restituisce il primo elemento di una sequenza che soddisfa una condizione specificata o un valore predefinito se un tale elemento non viene trovato.

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

Parametri di tipo

TSource

Tipo degli elementi di source.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> dal quale restituire un elemento.

predicate
Expression<Func<TSource,Boolean>>

Funzione per testare ogni elemento rispetto a una condizione.

Restituisce

TSource

default(TSource) se source è vuota o se nessun elemento supera il test specificato da predicate; in caso contrario, il primo elemento in source che supera il test specificato da predicate.

Eccezioni

source o predicate è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) passando un predicato. Nella seconda query non è presente alcun elemento nella sequenza che soddisfa la condizione.

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.

Commenti

Questo metodo ha almeno un parametro di tipo il Func<T,TResult> cui argomento di tipo Expression<TDelegate> è uno dei tipi. Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un Expression<TDelegate>oggetto .

Il FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) metodo genera un MethodCallExpression oggetto che rappresenta la chiamata FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) stessa come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al Execute<TResult>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro.

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che restituisce il primo elemento in source che soddisfa la condizione in predicateo un valore predefinito se nessun elemento soddisfa la condizione.

Si applica a

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

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Restituisce il primo elemento di una sequenza o un valore predefinito se la sequenza non contiene elementi.

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

Parametri di tipo

TSource

Tipo degli elementi di source.

Parametri

source
IQueryable<TSource>

Oggetto IEnumerable<T> di cui restituire il primo elemento.

defaultValue
TSource

Valore predefinito da restituire se la sequenza è vuota.

Restituisce

TSource

defaultValue se source è vuoto; in caso contrario, il primo elemento in source.

Eccezioni

source è null.

Si applica a

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

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Restituisce il primo elemento della sequenza che soddisfa una condizione specificata o un valore predefinito se tale elemento non viene trovato.

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

Parametri di tipo

TSource

Tipo degli elementi di source.

Parametri

source
IQueryable<TSource>

Oggetto IEnumerable<T> dal quale restituire un elemento.

predicate
Expression<Func<TSource,Boolean>>

Funzione per testare ogni elemento rispetto a una condizione.

defaultValue
TSource

Valore predefinito da restituire se la sequenza è vuota.

Restituisce

TSource

defaultValue se source è vuoto o se nessun elemento supera il test specificato da predicate; in caso contrario, il primo elemento in source che supera il test specificato da predicate.

Eccezioni

source o predicate è null.

Si applica a