【发布时间】:2016-10-16 19:24:37
【问题描述】:
似乎这是已经回答但我找不到的那种事情。
我有下表:
Id Parent Text
-----------------------
1 NULL A
2 1 B
3 2 C
4 3 D
5 NULL E
6 5 F
7 6 G
现在我想要这样的结果:(List<string>)
A
A > B
A > B > C
A > B > C > D
E
E > F
E > F > G
但问题是,我正在做的这个项目,首先使用数据库,我的意思是没有导航属性,Parent 的类型是string 而不是IEnumerable<T>。
到目前为止我做了什么:
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);
}
}
【问题讨论】:
-
显示
query变量的定义 -
这只是一个简单的 linq 查询:
var query = from item in myTable select item; -
查询是
IQueryable<T>还是IEnumerable<T>会有很大的不同。在第一种情况下,您将执行 N 个数据库查询。在第二种情况下,您接受的朴素算法将进行 N * N 次搜索。换句话说,两者都将非常低效。无论如何,问题都是你的:)