【发布时间】:2017-01-08 05:24:09
【问题描述】:
我正在尝试使用 Linq 从 13883 个对象的较大列表中创建一棵树,以将对象分类到它们的父组和子组中,每个对象都与一个 parentId 相关联,我可以使用将对象分组在一起
var sortedList = marketItems.GroupBy(p => p.parentId).Select(grp => grp.ToList()).ToList();
但这只会将它们分组,我还不熟悉 linq 并且无法弄清楚如何正确映射孩子。 null ParentGroup 是树的顶层。任何对 linq 有更多经验的人都可以提供一些关于如何正确分组 llist 的想法。
public JsonResult GetJsTree3Data()
{
var marketItems = new List<JsTree3Node>();
var itemList = new List<JsTree3Node>();
foreach (var group in GenerateGroups(connString))
{
var node = JsTree3Node.NewNode(group.id_str);
node.text = group.name;
node.state = new State(false, false, false);
node.parentId = group.marketParentGroup;
marketItems.Add(node);
}
foreach (var group in GenerateItems(connString))
{
var node = JsTree3Node.NewNode(group.id_str);
node.text = group.name;
node.state = new State(false, false, false);
node.parentId = group.marketParentGroup;
marketItems.Add(node);
}
// Create our root node and ensure it is opened
var root = new JsTree3Node()
{
id = "0",
text = "Market Items",
state = new State(true, false, false)
};
var sortedList = marketItems.GroupBy(u => u.parentId).Select(grp => grp.ToList()).ToList();
root.children = sortedList;
return Json(root, JsonRequestBehavior.AllowGet);
}
我尝试获得的最终结果是用户可以从中选择的项目树。树只有一层,因为子节点在排序列表中没有排序
【问题讨论】:
-
我不清楚您要做什么。什么是父组 2?是否有一些标识符表示,例如,什么项目是项目 ID 2157(结构修改,父组 2)的父项?你的数据没有显示任何可以让我得出结论的东西。
-
所以最终目标是列出父/子对?
-
您想分别对每个父母下的孩子列表进行排序吗?它们应该按名称排序?
-
能否提供一些父子数据?回答起来可能会更清楚
-
您需要提供minimal reproducible example。诸如可编译的类定义、示例数据、预期输出等。