Queryable.DefaultIfEmpty Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí prvky v sekvenci nebo kolekci s výchozí hodnotou s jednoutonem, pokud je posloupnost prázdná.
Přetížení
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) |
Vrátí prvky zadané sekvence nebo zadanou hodnotu v jednoúčelové kolekci, pokud je posloupnost prázdná. |
DefaultIfEmpty<TSource>(IQueryable<TSource>) |
Vrátí prvky zadané sekvence nebo výchozí hodnotu parametru typu v kolekci singleton, pokud je posloupnost prázdná. |
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
Vrátí prvky zadané sekvence nebo zadanou hodnotu v jednoúčelové kolekci, pokud je posloupnost prázdná.
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)
Parametry typu
- TSource
Typ prvků objektu source
.
Parametry
- source
- IQueryable<TSource>
Pokud IQueryable<T> chcete vrátit zadanou hodnotu, pokud je prázdná.
- defaultValue
- TSource
Hodnota, která se má vrátit, pokud je posloupnost prázdná.
Návraty
Hodnota IQueryable<T> , která obsahuje defaultValue
if source
, je prázdná, source
jinak .
Výjimky
source
je null
.
Příklady
Následující příklad kódu ukazuje situaci, ve které je užitečné volat DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) v dotazu LINQ. V tomto příkladu se do DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) předá výchozí hodnota.
// 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.
Poznámky
Metoda DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) vygeneruje MethodCallExpression , který představuje volání DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) sebe sama jako konstruované obecné metody. Pak předá MethodCallExpressionCreateQuery<TElement>(Expression) metodě parametru IQueryProvider reprezentované Provider vlastností source
.
Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazu, který představuje volání DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) , závisí na implementaci typu parametru source
. Očekávané chování je, že se vrátí source
, pokud není prázdné. V opačném případě vrátí objekt , IQueryable<T> který obsahuje defaultValue
.
Platí pro
DefaultIfEmpty<TSource>(IQueryable<TSource>)
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
- Zdroj:
- Queryable.cs
Vrátí prvky zadané sekvence nebo výchozí hodnotu parametru typu v kolekci singleton, pokud je posloupnost prázdná.
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)
Parametry typu
- TSource
Typ prvků objektu source
.
Parametry
- source
- IQueryable<TSource>
Pokud IQueryable<T> chcete vrátit výchozí hodnotu, pokud je prázdná.
Návraty
Hodnota IQueryable<T> , která obsahuje default
(TSource
), pokud source
je prázdná; source
v opačném případě .
Výjimky
source
je null
.
Příklady
Následující příklady kódu ukazují, jak použít DefaultIfEmpty<TSource>(IQueryable<TSource>) k zadání výchozí hodnoty v případě, že je sekvence zdroje prázdná.
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
Poznámky
Metoda DefaultIfEmpty<TSource>(IQueryable<TSource>) vygeneruje MethodCallExpression , který představuje volání DefaultIfEmpty<TSource>(IQueryable<TSource>) sebe sama jako konstruované obecné metody. Pak předá MethodCallExpressionCreateQuery<TElement>(Expression) metodě parametru IQueryProvider reprezentované Provider vlastností source
.
Chování dotazu, ke kterému dochází v důsledku spuštění stromu výrazu, který představuje volání DefaultIfEmpty<TSource>(IQueryable<TSource>) , závisí na implementaci typu parametru source
. Očekávané chování je, že se vrátí source
, pokud není prázdné. V opačném případě vrátí objekt , IQueryable<T> který obsahuje default(TSource)
.