Queryable.DefaultIfEmpty<TSource> Method (IQueryable<TSource>)
Microsoft Silverlight will reach end of support after October 2021. Learn more.
Returns the elements of the specified sequence or the type parameter's default value in a singleton collection if the sequence is empty.
Namespace: System.Linq
Assembly: System.Core (in System.Core.dll)
Syntax
'Declaration
<ExtensionAttribute> _
Public Shared Function DefaultIfEmpty(Of TSource) ( _
source As IQueryable(Of TSource) _
) As IQueryable(Of TSource)
public static IQueryable<TSource> DefaultIfEmpty<TSource>(
this IQueryable<TSource> source
)
Type Parameters
- TSource
The type of the elements of source.
Parameters
- source
Type: System.Linq.IQueryable<TSource>
The IQueryable<T> to return a default value for if empty.
Return Value
Type: System.Linq.IQueryable<TSource>
An IQueryable<T> that contains default(TSource) if source is empty; otherwise, source.
Usage Note
In Visual Basic and C#, you can call this method as an instance method on any object of type IQueryable<TSource>. When you use instance method syntax to call this method, omit the first parameter.
Exceptions
Exception | Condition |
---|---|
ArgumentNullException | source is nulla null reference (Nothing in Visual Basic). |
Remarks
The DefaultIfEmpty<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling DefaultIfEmpty<TSource>(IQueryable<TSource>) itself as a constructed generic method. It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.
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. The expected behavior is that it returns source if it is not empty. Otherwise, it returns an IQueryable<T> that contains default(TSource).
Examples
The following code examples demonstrate how to use DefaultIfEmpty<TSource>(IQueryable<TSource>) to provide a default value in case the source sequence is empty.
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)
outputBlock.Text &= first & vbCrLf
' This code produces the following output:
'
' Barley
End Sub
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];
outputBlock.Text += first + "\n";
}
/*
This code produces the following output:
Barley
*/
Version Information
Silverlight
Supported in: 5, 4, 3
Silverlight for Windows Phone
Supported in: Windows Phone OS 7.1
Platforms
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.