Я использую EntityFrameowrk 4 и WinForms.
У меня есть DataGridView, который показывает от 5 до 12 тысяч записей. Записи с разных уровней иерархии. Есть записи классов
A, B, C, D, где A содержит коллекцию B, B содержит коллекцию C и т. Д. Наиболее многочисленным классом является D. В DataGridView эта иерархия сглаживается, и каждая запись отображается в строке с некоторым цветом / форматирование шрифта. Для этого типа рендеринга я написал следующий код:
foreach (a in A)
{
var displayObjectA = new DisplayObject()
{
Name = a.Name,
Code = "Section",
Object = a
}
data.Add(displayObjectA);
var B = a.B;
foreach (b in B)
{
var displayObjectB = new DisplayObject()
{
Name = b.Name,
Code = "Subsection",
Object = b
}
data.Add(displayObjectB);
var C = b.C;
foreach (c in C)
{
var displayObjectC = new DisplayObject()
{
Name = c.Name,
Code = "Group",
Object = c
}
data.Add(displayObjectC);
var D = c.D;
foreach (d in D)
{
var displayObjectD = new DisplayObject()
{
Name = d.Name,
Code = d.Code,
Object = d
}
data.Add(displayObjectD);
}
}
}
}
после этого данные отображаются в DataGridView.
Проблема в том, что этот рендеринг занимает слишком много времени. И самой трудоемкой частью кажется линия
foreach (d in D)
в частности вызов функции
System.Data.Objects.DataClasses.EntityCollection<T>.GetEnumerator().
Когда я смотрел на эту функцию в Reflector, она показывает, что ее тело пусто.
Мои вопросы:
- Есть ли лучший способ сделать этот тип рендеринга?
- Как повысить производительность?
- Почему GetEnumerator () пуст? Это построено во время выполнения?