简体   繁体   中英

LINQ Getting Unique items from a List within a List

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM