Seleccione Varios campos de la lista en Linq

En ASP.NET C # tengo una estructura:

public struct Data
{
    public int item1;
    public int item2;
    public int category_id;
    public string category_name;
}

y tengo una lista de esos. Quiero seleccionarcategory_id ycategory_name, ejecutando unDISTINCT y finalmente unORDERBY encategory_name.

Esto es lo que tengo ahora:

List<Data> listObject = getData();
string[] catNames = listObject
                    .Select(i=> i.category_name)
                    .Distinct()
                    .OrderByDescending(s => s)
                    .ToArray();

Esto obviamente solo obtiene el nombre de la categoría. Mi pregunta es, ¿cómo obtengo múltiples campos, y en qué estructura de datos almacenaré esto?string[])?

EDITAR

El uso de una lista de estructuras no se establece en piedra. Si fuera aconsejable cambiar la estructura de mis datos de respaldo para facilitar la selección (escribiré muchos de estos), entonces con mucho gusto tomo recomendaciones.

Respuestas a la pregunta(4)

Su respuesta a la pregunta