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 une collection de singletons par défaut si la séquence est vide.
Surcharges
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) |
Retourne les éléments de la séquence spécifiée ou la valeur indiquée dans une collection de singletons 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 de singletons si la séquence est vide. |
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)
- Source:
- Queryable.cs
- Source:
- Queryable.cs
- Source:
- Queryable.cs
Retourne les éléments de la séquence spécifiée ou la valeur indiquée dans une collection de singletons 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
Le type des éléments de source
.
Paramètres
- source
- IQueryable<TSource>
IQueryable<T> pour lequel retourner la valeur spécifiée si vide.
- defaultValue
- TSource
Valeur à retourner si la séquence est vide.
Retours
IQueryable<T> qui contient defaultValue
si 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. Une valeur par défaut est transmise à DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) dans cet exemple.
// 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 DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) méthode génère un MethodCallExpression qui représente l’appel DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) en tant que méthode générique construite. Il passe ensuite à MethodCallExpression la CreateQuery<TElement>(Expression) méthode du IQueryProvider représenté par la Provider propriété du source
paramètre .
Le comportement de requête qui se produit à la suite de l’exécution d’une arborescence d’expressions qui représente l’appel DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) dépend de l’implémentation du type du source
paramètre. Le comportement attendu est qu’il retourne source
s’il n’est pas vide. Sinon, il retourne un IQueryable<T> qui contient defaultValue
.
S’applique à
DefaultIfEmpty<TSource>(IQueryable<TSource>)
- Source:
- Queryable.cs
- Source:
- Queryable.cs
- Source:
- Queryable.cs
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 de singletons 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);
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
Le type des éléments de source
.
Paramètres
- source
- IQueryable<TSource>
IQueryable<T> pour lequel retourner une valeur par défaut si vide.
Retours
IQueryable<T> qui contient default
(TSource
) si source
est vide ; sinon, source
.
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 au cas où 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 DefaultIfEmpty<TSource>(IQueryable<TSource>) méthode génère un MethodCallExpression qui représente l’appel DefaultIfEmpty<TSource>(IQueryable<TSource>) en tant que méthode générique construite. Il passe ensuite à MethodCallExpression la CreateQuery<TElement>(Expression) méthode du IQueryProvider représenté par la Provider propriété du source
paramètre .
Le comportement de requête qui se produit à la suite de l’exécution d’une arborescence d’expressions qui représente l’appel DefaultIfEmpty<TSource>(IQueryable<TSource>) dépend de l’implémentation du type du source
paramètre. Le comportement attendu est qu’il retourne source
s’il n’est pas vide. Sinon, il retourne un IQueryable<T> qui contient default(TSource)
.