I have 2 List objects:
List<int> lst1 = new List<int>();
List<int> lst2 = new List<int>();
Let’s say they have values:
lst1.Add(1);
lst1.Add(2);
lst1.Add(3);
lst1.Add(4);
lst2.Add(1);
lst2.Add(4);
I need to get an object containing the “distinct” list of both of these; so in this case the return would be List {2, 3}.
Is there an easy way to do this? Or do I need to iterate through each value of the lists and compare?
I am open to using ObjectQuery, LINQ, etc as these lists are coming from a database, and could potentially be several hundred to several thousand entries long.
Thanks!
Ahmad is nearly right with
Except, I believe – but that won’t give you items which are inlst2but not inlst1. So in the example you gave, if you added 5 tolst2, I imagine you’d want the result to be {2, 3, 5}. In that case, you want a symmetric difference. I don’t think there’s any way to do that directly in LINQ to Objects in a single call, but you can still achieve it. Here’s a simple but inefficient way to do it:(Obviously you only need
ToList()if you genuinely need aList<T>instead of anIEnumerable<T>.)The way to read this is “I want items that are in either list but not in both.”
It’s possible that it would be more efficient to use
Concat– which would still work asExceptis a set based operator which will only return distinct results: