I have two collections and I want to return an IEnumerable which is the concatenation of them. The returned enumerable should be lazy and should not modify the two initial collections (So, I do not want to copy the two collection into one and then return the result because that is not lazy)

The code below is an example of what I want to achieve in Java but written in c#:

```
public static IEnumerable<int> all()
{
    List<int> list1 = new List<int>() { 1, 2, 3 };
    List<int> list2 = new List<int>() { 4, 5, 6 };
    return list1.Concat(list2);
}

```