Tag: flatten

Linq:从展平列表中重建分层数据

免责声明:我从2天开始就一直在与这个问题作斗争(我已经在SO上阅读了很多类似的问题)..所以请耐心等待,我对Linq的小组提出错误并寻求帮助。 阶级结构 填充样本数据 我有一个Macrotab列表。 每个Macrotab对象都包含Tab列表。 每个Tab对象里面都有Slot 。 List hierarchaldata = CreateHierarchaldata(); *为了使问题易于阅读,我已将CreateHierarchaldata(填充一组样本数据)移至.NetFiddle: https ://dotnetfiddle.net/8mF1qI 压扁 以下几行使用Linq展平了这个结构: var flattenedList = (from macroTab in hierarchaldata from tab in macroTab.Tabs from slot in tab.Slots select new {macroTab.IDMacroTab, tab.IDTab, slot.IDSlot}).ToList(); 将数据聚合回层次结构 我试图使用Linq Group By 回到原始列表 。 这是我的目标:聚合MacroTab,选项卡和插槽的Id的数据并重新创建原始列表,但它不能按预期工作**: var antiflatten = from macrotab in flattenedList group macrotab by new {macrotab.IDMacroTab} […]

SelectMany以展平嵌套结构

我正在解析XML结构,我的类看起来像如下: class MyXml { //… List Content { get; set; } //… } class Node { // … public List Nodes { get; set; } public string Type { get; set; } //… } MyXml表示我正在解析的XML文件,其元素都称为 。 每个节点都有一个type属性,可以有不同的值。 节点的类型未与其深度相关联。 我可以在任何深度级别拥有任何节点类型。 我可以正确地解析结构,所以我得到一个MyXml对象,其内容是节点列表,其中List中的节点可以有子节点等等(我使用了递归)。 我需要做的是展平整个结构并仅提取某种类型的节点。 我尝试过: var query = MyXml.Content.SelectMany(n => n.Nodes); 但是它只采用结构深度为1的节点。我想在同一个集合中抓取每个节点,无论深度如何,然后过滤我需要的东西。

如何在linq中展平字典<string,List >并将键保留在结果中

你如何在linq中实现以下目标? 我觉得应该有一个Linq替代方案。 var foods = new Dictionary<string, List>(); foods.Add(“Cake”, new List() { “Sponge”, “Gateux”, “Tart” }); foods.Add(“Pie”, new List() { “Mud”, “Apple” }); foods.Add(“Roll”, new List() { “Sausage” }); var result = new List<Tuple>(); foreach (var food in foods) { foreach (var detail in food.Value) { result.Add(new Tuple(food.Key, detail)); } } ie cake pie to […]

深度优先使用LINQ展平对象层次结构的集合

我有一个对象层次结构(MasterNode – > ChildNodes),其中主节点和子节点属于同一类型,并且只有两个级别(顶级和子级)像这样(’A’是D,E和F的父级,’ B’是G的父母等) A–+ | D | E | F | B–+ | G | C–+ H I 假设我有一个MasterNodes作为父对象(A,B,C)的IEnumerable,给定一个父对象X我可以通过X.children得到它的子节点的IEnumerable 我知道我可以使用SelectMany方法或使用枚举所有叶子(子节点) from parent in Masternodes from child in parent.children select child 这将给我这个序列: [D,E,F,G,H,I] ,但这不是我要求的。 什么是LINQ查询以获取MasterNodes集合中对象的深度优先序列? (返回第一个父母,然后是所有孩子,然后是下一个父母,然后是所有孩子等等) 预期的结果应该是这样的序列: [A,D,E,F,B,G,C,H,I] 更新 : 我要求纯粹的.NET就绪LINQ。 我知道我可以定义自己的方法来做事,但我想要的东西只基于框架提供的方法。

AutoMapper和展平嵌套数组

我正在尝试使用AutoMapper来压缩多个级别的数组。 考虑以下源类: class X { public string A { get; set; } public Y[] B { get; set; } } class Y { public string C { get; set; } public Z[] D { get; set; } } class Z { public string E { get; set; } public string F { get; set; } […]