Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
MSDN Library

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

Returns the elements of the specified sequence or the specified value in a singleton collection if the sequence is empty.

Namespace:  System.Linq
Assemblies:   System.Linq.Queryable (in System.Linq.Queryable.dll)
  System.Core (in System.Core.dll)

public static IQueryable<TSource> DefaultIfEmpty<TSource>(
	this IQueryable<TSource> source,
	TSource defaultValue

Type Parameters


The type of the elements of source.


Type: System.Linq.IQueryable<TSource>

The IQueryable<T> to return the specified value for if empty.

Type: TSource

The value to return if the sequence is empty.

Return Value

Type: System.Linq.IQueryable<TSource>
An IQueryable<T> that contains defaultValue 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. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).


source is null.

The DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method generates a MethodCallExpression that represents calling DefaultIfEmpty<TSource>(IQueryable<TSource>, 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>, 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 defaultValue.

The following code example shows a situation in which it is useful to call DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) in a LINQ query. A default value is passed to DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) in this example.

                // 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 =
                    .Where(pet => pet.Age >= 10)
                    .Select(pet => pet.Name)

                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 =
                    .Where(pet => pet.Age >= 10)
                    .Select(pet => pet.Name)

                // There may be no elements in the array, so directly 
                // accessing element 0 may throw an exception. 
                    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.

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Portable Class Library

Supported in: Portable Class Library
© 2015 Microsoft