Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到XML(LINQ Order by应用于一组组)_C#_Xml_Linq_Sorting - Fatal编程技术网

C# LINQ到XML(LINQ Order by应用于一组组)

C# LINQ到XML(LINQ Order by应用于一组组),c#,xml,linq,sorting,C#,Xml,Linq,Sorting,我有以下格式的数据 ParentID GoalID GoalName PId:0#Position:1#Level:1 31 Default Folder PId:0#Position:2#Level:1 32 Folder 1 PId:0#Position:3#Level:1 33 Folder 2 PId:31#Position:1#

我有以下格式的数据

ParentID                            GoalID   GoalName
PId:0#Position:1#Level:1            31       Default Folder
PId:0#Position:2#Level:1            32       Folder 1
PId:0#Position:3#Level:1            33       Folder 2
PId:31#Position:1#Level:2           34       Sub-Folder in Default Folder
此处L1P1表示1级和位置1

我想要的是,我想根据级别和位置对其进行排序,以便数据看起来像

ParentID                            GoalID   GoalName
PId:0#Position:1#Level:1            31       Default Folder
PId:31#Position:1#Level:2           34       Sub-Folder in Default Folder
PId:0#Position:2#Level:1            32       Folder 1
PId:0#Position:3#Level:1            33       Folder 2
我在
XElement
中有上述数据,并应用了排序,但无法获得所需的输出

我也看过,但没有成功

我如何做到这一点。

这对我来说很有用:

var lookup = items.ToLookup(x => x.ParentID);

Func<int, IEnumerable<Goal>> treeOrder = null;
treeOrder = n =>
    lookup[n].SelectMany(x => new [] { x, }.Concat(treeOrder(x.GoalID)));

var results = treeOrder(0);
使用此类定义:

public class Goal
{
    public string TreeID;
    public int ParentID;
    public int GoalID;
    public string GoalName;
}

假设您的数据类似于以下格式:

<Tree>
    <TreeID>L1P1</TreeID>
    <ParentID>0</ParentID>
    <GoalID>31</GoalID>
    <GoalName>Default Folder</GoalName>
</Tree>

我不能理解它。这里有什么东西?另外,请查看视图中更新的数据No TreeId is there level And position is composed in the ParentId。@nrsharma-我删除了
RegEx
答案,因为它显然不正确。我的第一个解决方案仍然有效。我已经添加了
项的定义
。您可以使用“ParentId”中的级别和位置值吗?@nrsharma-它已经可以使用
ParentId
了-除非我遗漏了什么。我使用了OrderBy和ThenBy,但没有给出正确的输出。@nrsharma我看到您已经更新了数据格式。您是否实际拥有数据中的级别和位置?或者是根据进球数和记录是否有父ID推断出来的?如果您可以发布数据的实际XML格式,那就更好了。
<Tree>
    <TreeID>L1P1</TreeID>
    <ParentID>0</ParentID>
    <GoalID>31</GoalID>
    <GoalName>Default Folder</GoalName>
</Tree>
var trees = doc.Descendants("Tree")
    .OrderBy(x => Convert.ToInt32(x.Element("TreeID").Value.Substring(x.Element("TreeID").Value.IndexOf("P") + 1)))
    .ThenBy(x => Convert.ToInt32(x.Element("TreeID").Value.Substring(1, x.Element("TreeID").Value.IndexOf("P") - 1)))
    .ToList();