Wpf 如何对自引用表或实体进行排序

Wpf 如何对自引用表或实体进行排序,wpf,entity-framework,sorting,Wpf,Entity Framework,Sorting,我有两个实体,看起来像这样 public class Post{ [Key] public int Id { get; set; } [Required(ErrorMessage = "")] [MaxLength(100, ErrorMessage = "")] public string Name { get; set; } [ForeignKey("ParentPost")]

我有两个实体,看起来像这样

public  class Post{
        [Key]
        public int Id { get; set; }

        [Required(ErrorMessage = "")]
        [MaxLength(100, ErrorMessage = "")]
        public string Name { get; set; }

        [ForeignKey("ParentPost")]
        public int? ParentPostId { get; set; }
        public virtual Post ParentPost { get; set; }

        public ICollection<Post> SubPosts { get; set; }
} 

public  class User{
        [Key]
        public int Id { get; set; }

        [Required(ErrorMessage = "")]
        [MaxLength(100, ErrorMessage = "")]
        public string Name { get; set; }

        [ForeignKey("Post")]
        public int PostId { get; set; }
        public virtual Post Post { get; set; }
}
按级别排序

1
2
1.1
1.2
1.1.1
更新:

这里有一个替代我之前的答案,不需要你在帖子中添加属性。为Post实体创建扩展方法,以根据Post名称计算级别和编号。我想你给它起的名字是一致的

public static class ExtensionMethods
{
    public static int Level(this Post post)
    {
        var name = post.Name;
        var level = 0;
        level = name.Count(o => o == '.');
        return level;
    }

    public static int number(this Post post)
    {
        var name = post.Name;
        var number = 0;
        var split = name.Split('.');
        return split.Length > 1 ? int.Parse(split[split.Length - 1]) : int.Parse(name);
    }
}
然后可以使用linq进行排序,如:

var posts = new List<Post>();
posts.Add(new Post { Name = "1.2" });
posts.Add(new Post { Name = "1.1.1" });
posts.Add(new Post { Name = "2" });
posts.Add(new Post { Name = "1.1" });
posts.Add(new Post { Name = "1" });
foreach (var post in posts)
{
    Console.WriteLine(post.Name);
}
Console.WriteLine("\n\nAfter sorting");
var sorted = posts.OrderBy(p => p.Level()).ThenBy(p => p.number());
foreach (var post in sorted)
{
    Console.WriteLine(post.Name);
}

谢谢,但我不想为此添加新属性。
var posts = new List<Post>();
posts.Add(new Post { Name = "1.2" });
posts.Add(new Post { Name = "1.1.1" });
posts.Add(new Post { Name = "2" });
posts.Add(new Post { Name = "1.1" });
posts.Add(new Post { Name = "1" });
foreach (var post in posts)
{
    Console.WriteLine(post.Name);
}
Console.WriteLine("\n\nAfter sorting");
var sorted = posts.OrderBy(p => p.Level()).ThenBy(p => p.number());
foreach (var post in sorted)
{
    Console.WriteLine(post.Name);
}
Posts.OrderBy(p => p.Level)
    .ThenBy(p => p.Number);