In ASP.NET C# I have a struct:
public struct Data
{
public int item1;
public int item2;
public int category_id;
public string category_name;
}
and I have a List of those. I want to select category_id
and category_name
, running a DISTINCT
and finally an ORDERBY
on category_name
.
Here's what I have now:
List<Data> listObject = getData();
string[] catNames = listObject
.Select(i=> i.category_name)
.Distinct()
.OrderByDescending(s => s)
.ToArray();
This obviously just gets the category name. My question is, how do I get multiple fields, and what data structure will I store this in (not a string[]
)?
EDIT
Using a list of structs is not set in stone. If it would be advisable to change my backing data structure to make selects easier (I'll be writing a lot of these) then I'd gladly take recommendations.
Anonymous types allow you to select arbitrary fields into data structures that are strongly typed later on in your code:
var cats = listObject
.Select(i => new { i.category_id, i.category_name })
.Distinct()
.OrderByDescending(i => i.category_name)
.ToArray();
Since you (apparently) need to store it for later use, you could use the GroupBy operator:
Data[] cats = listObject
.GroupBy(i => new { i.category_id, i.category_name })
.OrderByDescending(g => g.Key.category_name)
.Select(g => g.First())
.ToArray();