2016-11-11 114 views
2

我有以下型号张贴问题和回答的问题LINQ到与父子关系SQL查询

型号

public partial class LMS_Question 
{ 
    [Key] 
    public int ClassDiscussionID { get; set; } 
    public int? ParentClassDiscussionID { get; set; } 
    public string Discussion { get; set; } 
    public string DiscussionTitle { get; set; } 
} 

当用户将发布新的问题了“ParentClassDiscussionID”会空,如果有任何答复添加到该问题,那么'ClassDiscussionID'将更新为'ParentClassDiscussionID'。

基本上ClassDiscussionID和ParentClassDiscussionID列具有父子关系。

但是,我想告诉喜欢DiscussionTitle数据,ReplyCount如下

DiscussionTitle ReplyCount 
------------------------- 
Question1 2 Reponses 
Question2 3 Reponses 
Question3 5 Reponses 

那么,如何才能做到这一点使用LINQ to SQL查询?

感谢您的帮助!

回答

1

所有你需要你的模型改变这样的事情

public partial class LMS_ClassDiscussion 
    { 
     public LMS_ClassDiscussion() 
     { 
      LMS_ClassDiscussionchild = new List<LMS_ClassDiscussion>(); 
     } 
     public int ClassDiscussionID { get; set; } 
     public int? ParentClassDiscussionID { get; set; } 
     public string Discussion { get; set; } 
     public string DiscussionTitle { get; set; } 
     public LMS_ClassDiscussion _LMS_ClassDiscussion { get; set; } 
     public List<LMS_ClassDiscussion> LMS_ClassDiscussionchild { get; set; } 
    } 

,那么你需要的方法来这样得到父母的所有儿童

public List<LMS_ClassDiscussion> GetChildren(IList<LMS_ClassDiscussion> source, int? parentId) 
     { 
      var children = source.Where(x => x.ParentClassDiscussionID == parentId).ToList(); 
      //GetChildren is called recursively again for every child found 
      //and this process repeats until no childs are found for given node, 
      //in which case an empty list is returned 
      children.ForEach(x => x.LMS_ClassDiscussionchild = GetChildren(source, x._LMS_ClassDiscussion.ClassDiscussionID)); 
      return children.ToList(); 

     } 

调用方法首先

var LMS_ClassDiscussions = GetChildren(query, null); 
    foreach (var item in LMS_ClassDiscussions) 
     { 
      Console.WriteLine(item._LMS_ClassDiscussion.ClassDiscussionID + "="+item.LMS_ClassDiscussionchild.Count); 
     }