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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.