Queryable.DefaultIfEmpty Queryable.DefaultIfEmpty Queryable.DefaultIfEmpty Queryable.DefaultIfEmpty Method

Definizione

Restituisce gli elementi in una sequenza o una raccolta di singleton di valore predefinito se la sequenza è vuota.Returns the elements in a sequence or a default valued singleton collection if the sequence is empty.

Overload

DefaultIfEmpty<TSource>(IQueryable<TSource>) DefaultIfEmpty<TSource>(IQueryable<TSource>) DefaultIfEmpty<TSource>(IQueryable<TSource>) DefaultIfEmpty<TSource>(IQueryable<TSource>)

Restituisce gli elementi della sequenza specificata o il valore predefinito del parametro di tipo in una raccolta singleton se la sequenza è vuota.Returns the elements of the specified sequence or the type parameter's default value in a singleton collection if the sequence is empty.

DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)

Restituisce gli elementi della sequenza specificata o il valore specificato in una raccolta singleton se la sequenza è vuota.Returns the elements of the specified sequence or the specified value in a singleton collection if the sequence is empty.

DefaultIfEmpty<TSource>(IQueryable<TSource>) DefaultIfEmpty<TSource>(IQueryable<TSource>) DefaultIfEmpty<TSource>(IQueryable<TSource>) DefaultIfEmpty<TSource>(IQueryable<TSource>)

Restituisce gli elementi della sequenza specificata o il valore predefinito del parametro di tipo in una raccolta singleton se la sequenza è vuota.Returns the elements of the specified sequence or the type parameter's default value in a singleton collection if the sequence is empty.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TSource> ^ DefaultIfEmpty(System::Linq::IQueryable<TSource> ^ source);
public static System.Linq.IQueryable<TSource> DefaultIfEmpty<TSource> (this System.Linq.IQueryable<TSource> source);
static member DefaultIfEmpty : System.Linq.IQueryable<'Source> -> System.Linq.IQueryable<'Source>
<Extension()>
Public Function DefaultIfEmpty(Of TSource) (source As IQueryable(Of TSource)) As IQueryable(Of TSource)

Parametri di tipo

TSource

Tipo degli elementi di source.The type of the elements of source.

Parametri

source
IQueryable<TSource>

Il IQueryable<T> per restituire un valore predefinito per se è vuota.The IQueryable<T> to return a default value for if empty.

Restituisce

IQueryable<TSource>

Un' IQueryable<T> che contiene default(TSource) se source è vuoto; in caso contrario, source.An IQueryable<T> that contains default(TSource) if source is empty; otherwise, source.

Eccezioni

Esempi

Gli esempi di codice seguenti illustrano come usare DefaultIfEmpty<TSource>(IQueryable<TSource>) per fornire un valore predefinito nel caso in cui la sequenza di origine è vuota.The following code examples demonstrate how to use DefaultIfEmpty<TSource>(IQueryable<TSource>) to provide a default value in case the source sequence is empty.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void DefaultIfEmptyEx1()
{
    // Create a list of Pet objects.
    List<Pet> pets =
        new List<Pet>{ new Pet { Name="Barley", Age=8 },
                       new Pet { Name="Boots", Age=4 },
                       new Pet { Name="Whiskers", Age=1 } };

    // Call DefaultIfEmtpy() on the collection that Select()
    // returns, so that if the initial list is empty, there
    // will always be at least one item in the returned array.
    string[] names =
        pets.AsQueryable()
        .Select(pet => pet.Name)
        .DefaultIfEmpty()
        .ToArray();

    string first = names[0];
    Console.WriteLine(first);
}

/*
    This code produces the following output:

    Barley
*/
Structure Pet
    Public Name As String
    Public Age As Integer
End Structure

Shared Sub DefaultIfEmptyEx1()
    ' Create a list of Pet objects.
    Dim pets As New List(Of Pet)(New Pet() { _
                        New Pet With {.Name = "Barley", .Age = 8}, _
                        New Pet With {.Name = "Boots", .Age = 4}, _
                        New Pet With {.Name = "Whiskers", .Age = 1}})

    ' Call DefaultIfEmtpy() on the collection that Select()
    ' returns, so that if the initial list is empty, there
    ' will always be at least one item in the returned array.
    Dim names() As String = pets.AsQueryable() _
        .Select(Function(Pet) Pet.Name) _
        .DefaultIfEmpty() _
        .ToArray()

    Dim first As String = names(0)
    MsgBox(first)

    ' This code produces the following output:
    '
    ' Barley

End Sub

Commenti

Il DefaultIfEmpty<TSource>(IQueryable<TSource>) metodo genera un MethodCallExpression che rappresenta una chiamata DefaultIfEmpty<TSource>(IQueryable<TSource>) stesso come un metodo generico costruito.The DefaultIfEmpty<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling DefaultIfEmpty<TSource>(IQueryable<TSource>) itself as a constructed generic method. Passa quindi il MethodCallExpression per il CreateQuery<TElement>(Expression) metodo del IQueryProvider rappresentato dal Provider proprietà del source parametro.It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

Il comportamento delle query che si verifica in seguito all'esecuzione di un albero delle espressioni che rappresenta una chiamata DefaultIfEmpty<TSource>(IQueryable<TSource>) dipende dall'implementazione del tipo del source parametro.The query behavior that occurs as a result of executing an expression tree that represents calling DefaultIfEmpty<TSource>(IQueryable<TSource>) depends on the implementation of the type of the source parameter. Il comportamento previsto è la restituzione source se non è vuota.The expected behavior is that it returns source if it is not empty. In caso contrario, restituisce un IQueryable<T> che contiene default(TSource).Otherwise, it returns an IQueryable<T> that contains default(TSource).

DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)

Restituisce gli elementi della sequenza specificata o il valore specificato in una raccolta singleton se la sequenza è vuota.Returns the elements of the specified sequence or the specified value in a singleton collection if the sequence is empty.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TSource> ^ DefaultIfEmpty(System::Linq::IQueryable<TSource> ^ source, TSource defaultValue);
public static System.Linq.IQueryable<TSource> DefaultIfEmpty<TSource> (this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member DefaultIfEmpty : System.Linq.IQueryable<'Source> * 'Source -> System.Linq.IQueryable<'Source>
<Extension()>
Public Function DefaultIfEmpty(Of TSource) (source As IQueryable(Of TSource), defaultValue As TSource) As IQueryable(Of TSource)

Parametri di tipo

TSource

Tipo degli elementi di source.The type of the elements of source.

Parametri

source
IQueryable<TSource>

Il IQueryable<T> per restituire il valore specificato per se è vuota.The IQueryable<T> to return the specified value for if empty.

defaultValue
TSource TSource TSource TSource

Valore da restituire se la sequenza è vuota.The value to return if the sequence is empty.

Restituisce

IQueryable<TSource>

Un' IQueryable<T> che contiene defaultValue se source è vuoto; in caso contrario, source.An IQueryable<T> that contains defaultValue if source is empty; otherwise, source.

Eccezioni

Esempi

Esempio di codice seguente viene illustrata una situazione in cui è utile illustrare DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) in un LINQLINQ query.The following code example shows a situation in which it is useful to call DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) in a LINQLINQ query. Viene passato un valore predefinito per DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) in questo esempio.A default value is passed to DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) in this example.

// Create a list of Pet objects.
List<Pet> pets =
    new List<Pet>{ new Pet { Name="Barley", Age=8 },
                   new Pet { Name="Boots", Age=4 },
                   new Pet { Name="Whiskers", Age=1 } };

// This query selects only those pets that are 10 or older.
// In case there are no pets that meet that criteria, call
// DefaultIfEmpty(). This code passes an (optional) default
// value to DefaultIfEmpty().
string[] oldPets =
    pets.AsQueryable()
    .Where(pet => pet.Age >= 10)
    .Select(pet => pet.Name)
    .DefaultIfEmpty("[EMPTY]")
    .ToArray();

Console.WriteLine("First query: " + oldPets[0]);

// This query selects only those pets that are 10 or older.
// This code does not call DefaultIfEmpty().
string[] oldPets2 =
    pets.AsQueryable()
    .Where(pet => pet.Age >= 10)
    .Select(pet => pet.Name)
    .ToArray();

// There may be no elements in the array, so directly
// accessing element 0 may throw an exception.
try
{
    Console.WriteLine("Second query: " + oldPets2[0]);
}
catch (Exception e)
{
    Console.WriteLine("Second query: An exception was thrown: " + e.Message);
}

/*
    This code produces the following output:

    First query: [EMPTY]
    Second query: An exception was thrown: Index was outside the bounds of the array.
*/

' Create a list of Pet objects.
Dim pets As New List(Of Pet)(New Pet() { _
                   New Pet With {.Name = "Barley", .Age = 8}, _
                   New Pet With {.Name = "Boots", .Age = 4}, _
                   New Pet With {.Name = "Whiskers", .Age = 1}})

' This query returns pets that are 10 or older. In case there are no pets 
' that meet that criteria, call DefaultIfEmpty(). This code passes an (optional) 
' default value to DefaultIfEmpty().
Dim oldPets() As String = pets.AsQueryable() _
    .Where(Function(Pet) Pet.Age >= 10) _
    .Select(Function(Pet) Pet.Name) _
    .DefaultIfEmpty("[EMPTY]") _
    .ToArray()
Try
    MsgBox("First query: " + oldPets(0))
Catch ex As Exception
    Console.WriteLine("First query: An exception was thrown: " + ex.Message)
End Try

' This query selects only those pets that are 10 or older.
' This code does not call DefaultIfEmpty().
Dim oldPets2() As String = _
    pets.AsQueryable() _
    .Where(Function(Pet) Pet.Age >= 10) _
    .Select(Function(Pet) Pet.Name) _
    .ToArray()

' There may be no elements in the array, so directly
' accessing element 0 may throw an exception.
Try
    MsgBox("Second query: " + oldPets2(0))
Catch ex As Exception
    MsgBox("Second query: An exception was thrown: " + ex.Message)
End Try

' This code produces the following output:
'
' First(query) : [EMPTY]
' Second query: An exception was thrown: Index was outside the bounds of the array.

Commenti

Il DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metodo genera un MethodCallExpression che rappresenta una chiamata DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) stesso come un metodo generico costruito.The DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method generates a MethodCallExpression that represents calling DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) itself as a constructed generic method. Passa quindi il MethodCallExpression per il CreateQuery<TElement>(Expression) metodo del IQueryProvider rappresentato dal Provider proprietà del source parametro.It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

Il comportamento delle query che si verifica in seguito all'esecuzione di un albero delle espressioni che rappresenta una chiamata DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) dipende dall'implementazione del tipo del source parametro.The query behavior that occurs as a result of executing an expression tree that represents calling DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) depends on the implementation of the type of the source parameter. Il comportamento previsto è la restituzione source se non è vuota.The expected behavior is that it returns source if it is not empty. In caso contrario, restituisce un IQueryable<T> che contiene defaultValue.Otherwise, it returns an IQueryable<T> that contains defaultValue.

Si applica a