Queryable.DefaultIfEmpty<TSource> Method (IQueryable<TSource>)

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

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.