В ASP.NET C # у меня есть структура:
public struct Data
{
public int item1;
public int item2;
public int category_id;
public string category_name;
}
и у меня есть их список. Я хочу , чтобы выбрать category_id
и category_name
, работает DISTINCT
и , наконец, ORDERBY
на category_name
.
Вот что у меня есть сейчас:
List<Data> listObject = getData();
string[] catNames = listObject
.Select(i=> i.category_name)
.Distinct()
.OrderByDescending(s => s)
.ToArray();
Очевидно, это просто получает название категории. У меня вопрос: как мне получить несколько полей и в какой структуре данных я буду хранить их (а не в string[]
)?
РЕДАКТИРОВАТЬ
Использование списка структур не является камнем преткновения. Если было бы целесообразно изменить структуру резервных данных, чтобы упростить выбор (я напишу много таких), я с радостью приму рекомендации.
c#
linq
data-structures
Chet
источник
источник
Ответы:
Анонимные типы позволяют вам выбирать произвольные поля в структурах данных, которые строго типизированы позже в вашем коде:
Поскольку вам (очевидно) нужно сохранить его для дальнейшего использования, вы можете использовать оператор GroupBy:
источник
Select
стать новым типом. В моем случае я выбрал новыйKeyValuePair
.Изменить : Сделано больше LINQ-ey!
источник
Вы можете использовать анонимный тип:
Компилятор генерирует код для класса с
name
иcategory_name
свойством и возвращают экземпляры этого класса. Вы также можете вручную указать имена свойств:Вы можете иметь произвольное количество свойств.
источник
Вы можете выбрать несколько полей с помощью linq Select, как показано выше в различных примерах, это будет возвращено как анонимный тип. Если вы хотите избежать этого анонимного типа, вот простой трюк.
Я думаю это решит твою проблему
источник
Это задача, для которой очень хорошо подходят анонимные типы . Вы можете возвращать объекты типа, который автоматически создается компилятором на основе использования.
Синтаксис имеет следующий вид:
В вашем случае попробуйте следующее:
источник
При этом используются анонимные типы, поэтому вы должны использовать ключевое слово var, поскольку результирующий тип выражения заранее не известен.
источник
источник
Вы можете сделать его KeyValuePair, чтобы он возвращал
"IEnumerable<KeyValuePair<string, string>>"
Итак, это будет так:
источник
источник