I have a class with following structure :-
public class Gallery
{
private string _category;
public string Category
{
get
{
return _category;
}
set
{
_category = value;
}
}
}
I created a list object like this :- List<Gallery> GalleryList = new List<Gallery>();
I have added items to this list object from sharepoint list. Now I need distinct category name from this list object. I tried GalleryList.Distinct()
. But I am getting error. Please help me if anyone knows the answer.
If you just need the category names, you need to project from the list of galleries to a sequence of category names - and then Distinct
will work:
// Variable name changed to match C# conventions
List<Gallery> galleryList = ...;
IEnumerable<string> distinctCategories = galleryList.Select(x => x.Category)
.Distinct();
If you want a List<string>
, just add a call to ToList
at the end.
You'll need a using
directive of:
using System.Linq;
as well.
Note that calling galleryList.Distinct()
itself should compile (if you have the using
directive) but it will just be comparing objects by reference as you haven't overridden Equals
/GetHashCode
.
If you actually need a collection of galleries, all of which have distinct categories, then you can use MoreLINQ which has a DistinctBy
method:
IEnumerable<Gallery> distinct = galleryList.DistinctBy(x => x.Category);
In that case you'd need a using
directive for the MoreLinq
namespace.
You should also learn about automatically implemented properties. Your Gallery
class can be written a lot more concisely as:
public class Gallery
{
public string Category { get; set; }
}
See more on this question at Stackoverflow