You can do:
var list1 = device.MemoryBanks
.SelectMany(m => new[] { m }.Concat(m.MemoryBlocks))
.ToList();
Note that this will create List<MemoryBlock>, not List<IMemory>, as in your example. To create a list of the interface type, make the final call ToList<IMemory>().
EDIT:
In .NET 3.5, in which the interface is IEnumerable<T>not covariant, you can do:
var list1 = device.MemoryBanks
.SelectMany(m => new IMemory[] { m }
.Concat(m.MemoryBlocks.Cast<IMemory>()))
.ToList();
source
share