Как я могу создать простой класс, который похож на данные, но без издержек? - PullRequest
0 голосов
/ 25 марта 2009

Я хочу создать простой класс, похожий на набор данных, но без издержек.

Итак, загрузите объект с помощью sqldatareader, а затем верните этот объект, подобный данным, который даст мне доступ к строкам и столбцам, например:

myObject[rowID]["columnname"]

Как бы вы занялись созданием такого объекта?

Я не хочу никаких встроенных методов / поведения для этого объекта, кроме доступа к строкам и столбцам данных.

Обновление:

Мне не нужны данные, я хочу что-то гораздо более простое (плюс я хочу научиться создавать такой объект).

Ответы [ 5 ]

3 голосов
/ 25 марта 2009

Этот тип структуры может быть легко создан с помощью сигнатуры типа:

List<Dictionary<string, object>>

Это разрешит доступ, как вы укажете, и должно быть довольно простым для заполнения.

Вы всегда можете создать объект, который наследуется от List > и реализует конструктор, который принимает SqlDataReader. Этот конструктор должен создать словарь enw для каждой строки и вставить новую запись в словарь для каждого столбца, используя имя столбца в качестве ключа.

2 голосов
/ 25 марта 2009

Я думаю, вы что-то упустили из-за того, как работает .Net. Дополнительные издержки, связанные с DataTable, несущественны. Можете ли вы указать на конкретную проблему производительности в существующем коде, которая, по вашему мнению, вызвана данными? Возможно, мы можем помочь исправить это более элегантным способом.

0 голосов
/ 30 марта 2009

Dictionary<int,object[]> будет лучше, чем List<Dictionary<string, object>>. Вам не нужен словарь для каждой строки, так как имена столбцов одинаковы для всех строк. И если вы хотите, чтобы он был легким, вы должны использовать индексы столбцов вместо имен.

Так, если у вас есть столбец «Имя», который является 3-м столбцом, чтобы получить его значение «Имя» из идентификатора строки 10, код будет:

object val = table[10][2];

Другой вариант - SortedList<int,object[]> ... в зависимости от способа доступа к данным (только прямой или произвольный доступ).

Вы также можете использовать MultiDictionary<int,object> из PowerCollections .

С точки зрения использования памяти, я думаю, что лучшим вариантом будет использование массива с одним измерением и некоторой свободной емкостью. Таким образом, после каждой, скажем, 100 строк, вы должны создать новый массив, скопировать в него старое содержимое и оставить в конце 100 пустых строк. Но вам придется сохранять какой-то индекс при удалении строки, чтобы она помечалась как удаленная без изменения размера массива.

0 голосов
/ 30 марта 2009

Возможно, конкретная вещь, о которой вы спрашиваете, это как использовать удобный ["whatever"] индексный синтаксис в вашем собственном табличном объекте.

Если это так, я предлагаю вам обратиться к этой странице MSDN по индексаторам.

0 голосов
/ 25 марта 2009

Разве это не DataSet / DataTable? Может быть, я не понял вопрос. Кроме того, что такое язык программирования?

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