I have a List
of type MyObject
with a definition below:
class MyObject {
public string ListName { get; set; }
public IEnumerable<OtherObject> ObjectList { get; set;}
}
Given a List
of type MyObject
, using LINQ what expression should I use to get all distinct OtherObject
?
What I was planning to do was loop each MyObject
and get the distinct OtherObject
from the ObjectList
property, but then I need to get the distinct across the list.
Please note that if:
MyObject[0].Objectlist[0] == 'ItemA'
and MyObject[1].Objectlist[0] == 'ItemA'
it will still return a single instance of ItemA
. This code is just a representation only. This is not how I access my objects, by the way.
You can achieve this simply using Set logic. C# has a nice implementation in the form of HashSet:
var set = new HashSet<OtherObject>(myObjects.SelectMany(mo => mo.ObjectList));
Or if you prefer deferred execution, you can use the LINQ Distinct method:
var distinct = myObjects.SelectMany(mo => mo.ObjectList).Distinct();
How about:
var l = new List<MyObject>(...);
var unique = l.SelectMany(j => j.ObjectList).Distinct();
You can use the technique from Distinct() with lambda? to alter how you decide if an object is distinct from another.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With