caching
или другое постоянство в памяти намного лучше, чем делать это в реляционной системе :) ... эй ... это упс!
только мои 2 цента!
например.
var categories = /* method for domain-objects*/.ToDictionary(category => category.ID);
foreach (var category in categories.Values)
{
if (!category.ParentCategoryID.HasValue)
{
continue;
}
Category parentCategory;
if (categories.TryGetValue(category.ParentCategoryID.Value, out parentCategory))
{
parentCategory.AddSubCategory(category);
}
}
и вуаля ... твое дерево готово к работе!
редактирование:
Вы точно знаете, где ваша производительность - узкое место? ...
, чтобы дать вам несколько идей, например:
- загрузка из базы данных
- создание структуры
- запрос структуры
загрузка из базы данных:
затем вы должны загрузить его один раз и убедиться, что у вас есть отслеживание изменений / уведомление, чтобы получить изменения (если они были сделаны) или оптимизировать ваш запрос!
построение структуры:
способ, которым я создаю дерево (обходная часть) - это пустая трата, которую вы можете сделать с Dictionary<TKey, TValue>
запрос структуры:
структура, которую я использовал в моем примере, быстрее, чем List<T>
. Dictionary<TKey, TValue>
использует индекс по ключам - поэтому вы можете использовать int
для ключей (идентификаторов)
редактирование:
Таким образом, вы используете DataTable для исправления
проблема. Теперь у вас есть 2 проблемы: я
и DataTable
что у тебя сейчас? откуда ты начинаешь? Вы можете определить, где находится ваша грязь? дай нам код!