Как добавить данные из кэша в DataTable? - PullRequest
0 голосов
/ 17 февраля 2010

Мне стыдно спрашивать, но как лучше всего добавить данные пары ключ / значение в кеше (HttpRuntime.Cache) в DataTable?

В настоящее время я выгружаю данные пары ключ / значение из кэша в HashTable, который становится DataSource для объекта Repeater. К сожалению, я не могу отсортировать данные в HashTable и поэтому думал, что DataTable (будучи DataSource для репитера) решит мою дилемму.

Ответы [ 5 ]

1 голос
/ 21 февраля 2010

Если вы просто хотите скопировать каждую пару ключ / значение из кэша в DataTable:

DataTable table = new DataTable();
table.Colums.Add("key", typeof(string));
table.Colums.Add("value", typeof(string));

foreach (DictionaryEntry entry in HttpRuntime.Cache)
{
    table.Rows.Add(entry.Key, entry.Value);
}

Предполагается, что ключи и значения имеют тип string, но если это не так, просто замените типы, упомянутые в строке # 2 и # 3 в коде.

Вновь созданный DataTable может быть привязан к Repeater, используя такой код:

myRepeater.DataSource = table;
myRepeater.DataBind();
1 голос
/ 17 февраля 2010

Рассматривали ли вы Класс SortedList или Класс SortedDictionary

Представляет коллекцию ключ / значение пары, которые отсортированы по ключу на основе связанный IComparer <(Of <(T>)>) осуществление.

0 голосов
/ 21 февраля 2010
This should do the trick:

Sub Main() Handles Me.Load
    Dim Hash As New Hashtable

    Hash.Add("Tom", "Arnold")
    Hash.Add("Sly", "Stallone")

    HashToDataTable(Hash)
End Sub

Function HashToDataTable(ByVal Hash As Hashtable) As Data.DataTable
    Dim Table As New Data.DataTable()

    Table.Columns.Add("Key", GetType(String))
    Table.Columns.Add("Value", GetType(Object)) 'You can use any type you want.

    For Each Key In Hash.Keys
        Table.Rows.Add(Key, Hash(Key))
    Next

    Return Table
End Function
0 голосов
/ 17 февраля 2010

Или вы можете создать свой собственный класс, обладающий свойствами, которые будут позже привязаны к повторителю, и добавить их в список этого типа, а также легко отсортировать по linq

//your data container class 
 public class MyClass
    {
        public string Name { get; set; }
    }

//Put all classes into the list before caching it 
List<MyClass> source = new List<MyClass>() ; 

//use this to sort with any kind of data inside your own defined class 
var sortedResult = source.OrderBy(x => x.Name);
0 голосов
/ 17 февраля 2010

Есть ли причина, по которой вы не хотите хранить таблицу исходных данных в своем кэше? (Помимо очевидного большого веса объекта, я имею в виду?) Это то, что вы можете поделиться со всеми пользователями только для чтения? Если это так, то это, вероятно, хороший кандидат для кэширования в каком-либо формате (может быть, IDictionary?).

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