Queryable.DefaultIfEmpty Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает элементы последовательности или одноэлементную коллекцию со значением по умолчанию, если последовательность пуста.
Перегрузки
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) |
Возвращает элементы указанной последовательности или одноэлементную коллекцию, содержащую указанное значение, если последовательность пуста. |
DefaultIfEmpty<TSource>(IQueryable<TSource>) |
Возвращает элементы указанной последовательности или одноэлементную коллекцию, содержащую значение параметра типа по умолчанию, если последовательность пуста. |
DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
Возвращает элементы указанной последовательности или одноэлементную коллекцию, содержащую указанное значение, если последовательность пуста.
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)
Параметры типа
- TSource
Тип элементов source
.
Параметры
- source
- IQueryable<TSource>
Объект IQueryable<T>, для которого возвращается указанное значение, если последовательность пуста.
- defaultValue
- TSource
Значение, возвращаемое в случае пустой последовательности.
Возвращаемое значение
Объект IQueryable<T>, содержащий значение defaultValue
, если последовательность source
пуста; в противном случае возвращается source
.
Исключения
source
имеет значение null
.
Примеры
В следующем примере кода показана ситуация, в которой полезно вызывать DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) в запросе LINQ. В этом примере передается значение по умолчанию 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.
Комментарии
Метод DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) создает объект , MethodCallExpression представляющий вызов DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource
параметра .
Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) , зависит от реализации типа source
параметра. Ожидаемое поведение заключается в том, что он возвращает значение source
, если он не пуст. В противном случае он возвращает объект IQueryable<T> , содержащий defaultValue
.
Применяется к
DefaultIfEmpty<TSource>(IQueryable<TSource>)
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
- Исходный код:
- Queryable.cs
Возвращает элементы указанной последовательности или одноэлементную коллекцию, содержащую значение параметра типа по умолчанию, если последовательность пуста.
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)
Параметры типа
- TSource
Тип элементов source
.
Параметры
- source
- IQueryable<TSource>
Объект IQueryable<T>, для которого возвращается значение по умолчанию, если последовательность пуста.
Возвращаемое значение
Объект IQueryable<T>, содержащий значение default
(TSource
), если последовательность source
пуста; в противном случае возвращается source
.
Исключения
source
имеет значение null
.
Примеры
В следующих примерах кода показано, как использовать DefaultIfEmpty<TSource>(IQueryable<TSource>) для предоставления значения по умолчанию в случае, если исходная последовательность пуста.
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
Комментарии
Метод DefaultIfEmpty<TSource>(IQueryable<TSource>) создает объект , MethodCallExpression представляющий вызов DefaultIfEmpty<TSource>(IQueryable<TSource>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource
параметра .
Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов DefaultIfEmpty<TSource>(IQueryable<TSource>) , зависит от реализации типа source
параметра. Ожидаемое поведение заключается в том, что он возвращает значение source
, если он не пуст. В противном случае он возвращает объект IQueryable<T> , содержащий default(TSource)
.