// 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
}
var list3 = list1.Concat(list2);
// or
var list4 = list1.Union(list2);
// Union is a set operation - it returns distinct values.
// Concat simply returns the items from the first sequence followed by the items from the second sequence; the resulting sequence can include duplicate items.
// You can think of Union as Concat followed by Distinct.