2011-08-11 23 views
2

需要用下面的語句轉換爲LINQ幫助:轉換難以有序SQL語句LINQ(EDMX)

SELECT * FROM comments 
WHERE good_id = '19' AND allow = '1' 
ORDER BY IF(parent_id = 0, id, parent_id) DESC, id ASC 

它的聲明顯示下一順序列表中的註釋:

--Comment 
--Subcomment (if parent_id != 0) 
--Subcomment (if parent_id != 0) 
--Comment 
--Subcomment (if parent_id != 0) 
etc. 

但我不不知道如何在LINQ上實現它。有任何想法嗎?

+0

嗨!謝謝你的回答!我試過了,但排序錯誤。現在我試着訂購一些實驗 –

+0

我的意思是,發佈你到目前爲止嘗試過的東西......其他人將更有可能幫助你。 –

+0

對不起,現在是在基輔上午1點,這太難以閱讀我的文本:)))。看看buttom,這個解決方案適用於我 –

回答

1

還沒有編譯這個,但我認爲我是在正確的道路上。

var comments = from c in db.Comments 
    where c.good_id == 19 && c.allow = "1" 
    orderby myFunction(c.parent_id, c.id) descending, id ascending 
    select comments; 


public int myFunction(int parentID, in ID) 
{ 
    return parent_id == 0 ? id : parent_id; 
} 
+0

謝謝!我已經完成了你的工作。 OrderByDescending(d => - (d.parent_id == 0?d.id:d.parent_id)) –

1

如果模型關係設置正確,那麼你不需要做任何幻想

var comments = dataCoontext.Comments 
          .Where(c => c.GoodId = 19 && 
             c.Allow = 1 && 
             c.ParentId = 0) //Get top level comments 
          .OrderBy(c => c.Id); 

foreach(var comment in comments){ 
    Console.WriteLine("Comment:" + comment.Text); 
    GetSubComments(comment); 
} 

然後使用以下

public void GetSubComments(Comment comment){ 
    foreach(var subComment in comment.Children){ //You can apply any sub ordering to Children 
     Console.WriteLine("Sub comment:" + subComment.Text); 
     GetSubComments(subComment); 
    } 
} 
+0

此地址如何排序? – 2011-08-11 22:53:52

+0

我認爲它會默認按ID排序。我將用明確的順序進行更新 – NinjaNye