There are a number of useful LINQ set-based operations that are often overlooked.
---
title: Useful LINQ Set Operations
subtitle: There are a number of useful LINQ set-based operations that are often overlooked.
author: C# Tips
date: May 16, 2022
source: https://leanpub.com/cstips
snippet: https://jonlabelle.com/snippets/view/markdown/useful-linq-set-operations
notoc: false
---
## Concat
To join two IEnumerable sequences together:
```csharp
IEnumerable<int>oneToFive=new[]{1,2,3,4,5};
IEnumerable<int>sixToTen=new[]{6,7,8,9,10};
IEnumerable<int>oneToTen=oneToFive.Concat(sixToTen);
```
oneTen now contains the values 1 through 10;
## Union
To combine all the unique values:
```csharp
IEnumerable<int>oneToFive=new[]{1,2,3,4,5};
IEnumerable<int>twoToSix=new[]{2,3,4,5,6};
IEnumerable<int>oneToSix=oneToFive.Union(twoToSix);
```
oneToSix now contains 1 through 6. The values 2, 3, 4, 5 are not duplicated in the result.
## Intersect
To get values that only appear in both sequences:
```csharp
IEnumerable<int>oneToFive=new[]{1,2,3,4,5};
IEnumerable<int>twoToSix=new[]{2,3,4,5,6};
IEnumerable<int>twoToFive=oneToFive.Intersect(twoToSix);
```
twoToFive contains only 2 through 5. 1 and 6 do not appear as they do not appear in both sequences.
## Except
To get only those values inside the first sequence that do not appear in the second sequence:
```csharp
IEnumerable<int>oneToFive=new[]{1,2,3,4,5};
IEnumerable<int>sixToTen=new[]{6,7,8,9,10};
IEnumerable<int>resultOneToFive=oneToFive.Except(sixToTen);
```
resultOneToFive contains all the values from the first sequence as none of them appear in the second sequence sixToTen.
As another example:
```csharp
varcolors=new[]{"Red","Green","Blue"};
varcolorsResult=colors.Except(new[]{"Red","Green","Orange"});
```
colorsResult contains only "Blue" because "Blue" does not appear in the second sequence "Red", "Green", "Orange".