Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

Queryable.Concat<TSource> Method

Concatenates two sequences.

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

public static IQueryable<TSource> Concat<TSource>(
	this IQueryable<TSource> source1,
	IEnumerable<TSource> source2

Type Parameters


The type of the elements of the input sequences.


Type: System.Linq.IQueryable<TSource>

The first sequence to concatenate.

Type: System.Collections.Generic.IEnumerable<TSource>

The sequence to concatenate to the first sequence.

Return Value

Type: System.Linq.IQueryable<TSource>
An IQueryable<T> that contains the concatenated elements of the two input sequences.

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).


source1 or source2 is null.

The Concat<TSource>(IQueryable<TSource>, IEnumerable<TSource>) method generates a MethodCallExpression that represents calling Concat<TSource>(IQueryable<TSource>, IEnumerable<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 source1 parameter.

The query behavior that occurs as a result of executing an expression tree that represents calling Concat<TSource>(IQueryable<TSource>, IEnumerable<TSource>) depends on the implementation of the type of the source1 parameter. The expected behavior is that the elements in source2 are concatenated to those of source1 to create a new sequence.

The following code example demonstrates how to use Concat<TSource>(IQueryable<TSource>, IEnumerable<TSource>) to concatenate two sequences.

            class Pet
                public string Name { get; set; }
                public int Age { get; set; }

            // This method creates and returns an array of Pet objects. 
            static Pet[] GetCats()
                Pet[] cats = { new Pet { Name="Barley", Age=8 },
                               new Pet { Name="Boots", Age=4 },
                               new Pet { Name="Whiskers", Age=1 } };
                return cats;

            // This method creates and returns an array of Pet objects. 
            static Pet[] GetDogs()
                Pet[] dogs = { new Pet { Name="Bounder", Age=3 },
                               new Pet { Name="Snoopy", Age=14 },
                               new Pet { Name="Fido", Age=9 } };
                return dogs;

            public static void ConcatEx1()
                Pet[] cats = GetCats();
                Pet[] dogs = GetDogs();

                // Concatenate a collection of cat names to a 
                // collection of dog names by using Concat().
                IEnumerable<string> query =
                    .Select(cat => cat.Name)
                    .Concat(dogs.Select(dog => dog.Name));

                foreach (string name in query)

            // This code produces the following output: 
            // Barley 
            // Boots 
            // Whiskers 
            // Bounder 
            // Snoopy 
            // Fido

.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