Queryable.DefaultIfEmpty Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Retourne les éléments d’une séquence ou d’une collection singleton par défaut si la séquence est vide.
Surcharges
| Nom | Description |
|---|---|
| DefaultIfEmpty<TSource>(IQueryable<TSource>) |
Retourne les éléments de la séquence spécifiée ou la valeur par défaut du paramètre de type dans une collection singleton si la séquence est vide. |
| DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) |
Retourne les éléments de la séquence spécifiée ou la valeur spécifiée dans une collection singleton si la séquence est vide. |
DefaultIfEmpty<TSource>(IQueryable<TSource>)
Retourne les éléments de la séquence spécifiée ou la valeur par défaut du paramètre de type dans une collection singleton si la séquence est vide.
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)
Paramètres de type
- TSource
Type des éléments de source.
Paramètres
- source
- IQueryable<TSource>
Pour IQueryable<T> renvoyer une valeur par défaut si elle est vide.
Retours
Qui contient () s’il IQueryable<T> est vide ; sinon, default.TSourcesourcesource
Exceptions
source a la valeur null.
Exemples
Les exemples de code suivants montrent comment utiliser DefaultIfEmpty<TSource>(IQueryable<TSource>) pour fournir une valeur par défaut si la séquence source est vide.
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
Remarques
La méthode DefaultIfEmpty<TSource>(IQueryable<TSource>) génère une MethodCallExpression qui représente l’appel de DefaultIfEmpty<TSource>(IQueryable<TSource>) elle-même en tant que méthode générique construite. Il transmet ensuite la MethodCallExpression à la méthode CreateQuery<TElement>(Expression) de l'IQueryProvider représentée par la propriété Provider du paramètre source.
Le comportement de requête qui se produit suite à l’exécution d’une arborescence d’expressions qui représente l’appel de DefaultIfEmpty<TSource>(IQueryable<TSource>) dépend de l’implémentation du type du paramètre source. Le comportement attendu est qu’il retourne source s’il n’est pas vide. Sinon, elle retourne une IQueryable<T> valeur qui contient default(TSource).
S’applique à
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)
Retourne les éléments de la séquence spécifiée ou la valeur spécifiée dans une collection singleton si la séquence est vide.
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)
Paramètres de type
- TSource
Type des éléments de source.
Paramètres
- source
- IQueryable<TSource>
Pour IQueryable<T> renvoyer la valeur spécifiée si elle est vide.
- defaultValue
- TSource
Valeur à retourner si la séquence est vide.
Retours
Qui IQueryable<T> contient defaultValue s’il source est vide ; sinon, source.
Exceptions
source a la valeur null.
Exemples
L’exemple de code suivant montre une situation dans laquelle il est utile d’appeler DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) une requête LINQ. Dans cet exemple, une valeur par défaut est transmise DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) .
// 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.
Remarques
La méthode DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) génère une MethodCallExpression qui représente l’appel de DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) elle-même en tant que méthode générique construite. Il transmet ensuite la MethodCallExpression à la méthode CreateQuery<TElement>(Expression) de l'IQueryProvider représentée par la propriété Provider du paramètre source.
Le comportement de requête qui se produit suite à l’exécution d’une arborescence d’expressions qui représente l’appel de DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) dépend de l’implémentation du type du paramètre source. Le comportement attendu est qu’il retourne source s’il n’est pas vide. Sinon, elle retourne une IQueryable<T> valeur qui contient defaultValue.