Scheint so, als ob das schon beantwortet worden wäre, aber ich kann es nicht finden.
ich folgenden Tabelle haben:Wie man Selbstreferenzierungsanfrage abflachen?
Id Parent Text
-----------------------
1 NULL A
2 1 B
3 2 C
4 3 D
5 NULL E
6 5 F
7 6 G
Jetzt möchte ich so das Ergebnis haben: (List<string>
)
A
A > B
A > B > C
A > B > C > D
E
E > F
E > F > G
Aber das Problem ist, dass dieses Projekt, das ich auf sie arbeite, Anwendungen Datenbank zuerst, ich meine, es gibt keine Navigationseigenschaft, Parent
ist Typ von string
nicht IEnumerable<T>
.
Was ich bisher getan haben:
var list = new List<string>();
string e2 = string.Empty;
foreach (var item in query)
{
string e1 = string.Empty;
if (item.Parent == null)
{
list.Add(p.Text);
e2 = item.Text;
}
else
{
foreach (var subItem in query.Where(t => t.Id == p.Parent))
{
if (subItem.Id != 1)
{
e1 = e2 + " > " + subItem.Text;
}
else
{
e1 = subItem.Text;
}
}
list.Add(e1 + " > " + p.Text);
}
}
zeigen die Definition der 'query' Variable –
es ist nur eine einfache Linq-Abfrage:' var query = von Posten in myTable \t \t \t wählen Sie den Punkt; ' –
Es gibt einen großen Unterschied, ob die Abfrage' IQueryable ist 'oder' IEnumerable '. Im ersten Fall führen Sie N Datenbankabfragen durch. Im zweiten Fall wird der naive Algorithmus, den Sie akzeptiert haben, N * N Suchen durchführen. Mit anderen Worten, beide werden sehr ineffizient sein. Wie auch immer, das Problem liegt ganz bei dir :) –