// Create your object
public class A { int Id { get; set; } A() { } A(int id) { Id = id;} }
public class B { int Id { get; set; } B() { } B(int id) { Id = id;} }
// Construct your lists
List<A> list = new List<A>() { new A( Id = 1 ), new A( Id = 2 ) };
List<B> list1 = new List<B>() { new B( Id = 3 ), new B( Id = 4 ) };
// Then create a linq query and convert the result to a list
List<object> all = (from x in list select (object)x).ToList();
// Now add the second list to the end of the last one
all.AddRange((from x in list1 select (object)x).ToList());
// You can use this new list to loop it like this
foreach (object item in all)
{
// If you want to check which object we are looping you do this:
bool obj1 = item is A;
// Now you can cast the item to your object in a conditional operator
Console.WriteLine(obj1 ? (item as A).Id : (item as B).Id);
// Output:
// 1
// 2
// 3
// 4
}