2016-11-11 158 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); 
     }