Select Multiple Fields from List in Linq

c#, data-structures, linq

Solution

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();

Problem

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.

Original source

Related problems