Операции Linq со списком хеш-таблиц? - PullRequest
0 голосов
/ 13 ноября 2009

Я работаю с набором устаревшего кода DAO, который возвращает IList, где каждый Hashtable представляет строку динамически исполняемого SQL-запроса. Например, список может содержать следующие записи / хеш-таблицы:

Hashtable1:
Ключ: столбец 15, значение: «Джек»
Ключ: столбец 16, значение: "Стивенс"
Ключ: столбец 18, значение: "23.07.1973"
Ключ: столбец 25, значение: «Активно»

Hashtable2:
Ключ: столбец 15, значение: "Мелани"
Ключ: столбец 16, значение: «Чирок»
Ключ: столбец 18, значение: «ноль»
Ключ: столбец 25, значение: «Неактивно»

Hashtable3:
Ключ: столбец 15, значение: "Генри"
Ключ: столбец 16, значение: «черный»
Ключ: столбец 18, значение: "16.03.1913"
Ключ: столбец 25, значение: «Активно»

Использование статического типа вместо Hashtable не может быть и речи, поскольку результат запроса неизвестен во время выполнения; и количество столбцов, и характер этих столбцов являются полностью динамическими.

Я хотел бы иметь возможность выполнять операции над этим набором данных на основе Linq (группирование, упорядочение и т. Д.), Но я абсолютно не могу понять, как может выглядеть синтаксис. В качестве простого примера, скажем, я хочу отсортировать список по убыванию столбца 15. Лучший синтаксис, который я придумал:

var rawGridData = (List<Hashtable>) _listDao.GetListGridContents(listID, null, null);   
var sortedGridData = rawGridData.OrderBy(s => s.Keys.Cast<string>().Where(k => k == "Column15"));     

Однако это приводит к исключению при перечислении sortedGridData: «По крайней мере, один объект должен реализовывать IComparable».

Я боролся с этой проблемой в течение нескольких дней и близок к концу ... Пожалуйста, помогите!

1 Ответ

2 голосов
/ 13 ноября 2009

Это должно помочь вам начать:

var sortedGridData = rawGridData.OrderBy(r => r["Column15"])

Это сопоставляет каждую «запись» со значением в «Столбце15», а затем упорядочивает результирующую проекцию. Это легко обобщается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...