I thought that I understood Intersect, but it turns out I was wrong.
List<int> list1 = new List<int>() { 1, 2, 3, 2, 3};
List<int> list2 = new List<int>() { 2, 3, 4, 3, 4};
list1.Intersect(list2) => 2,3
//But what I want is:
// => 2,3,2,3,2,3,3
I can figure a way like:
var intersected = list1.Intersect(list2);
var list3 = new List<int>();
list3.AddRange(list1.Where(I => intersected.Contains(I)));
list3.AddRange(list2.Where(I => intersected.Contains(I)));
Is there a easier way in LINQ to achieve this?
=== UPDATE ===
I do need to state that I do not care in which order the results are given.
2,2,2,3,3,3,3 would also be perfectly OK.
Problem is that I am using this on a very large collection, So I need efficiency.
=== UPDATE 2 === Yes, we are talking about Objects, not ints. The ints were just for the easy example, but I realize this can make a difference.
However, I found a better way to avoid the problem of having huge collections, so the given answer is good enough for my situation and understanding.