2013-05-18 211 views
0

我有以下查詢,我想在Linq(使用c#)中編寫它。我應該怎麼做?將SQL查詢轉換爲linq查詢

declare @parentId bigint 
set @parentId = (select ArticlePart from tbl_Article where ArticleID = 70001) 
declare @ids varchar(100) 
set @ids='' 
while @parentId is not null 
begin 
    set @ids = @ids +CAST(@parentId as varchar(50))+',' 
    set @parentId = (select ArticlePart from tbl_Article where ArticleID = @parentId) 
end 
+2

爲了獲得最佳性能,你應該寫爲[遞歸CTE(HTTP:// MSDN。 SQL中的microsoft.com/en-us/library/ms186243(v=sql.105).aspx)。不是linq。 – Magnus

+1

Linq不能做控制流,也不能做遞歸CTE。我建議你按照Magnus的建議寫一個遞歸CTE,然後使用EF或L2S或nHibernate將查詢結果映射到對象中。 – Aron

+0

查看Linqer http://www.sqltolinq.com/ – 2013-05-18 10:05:12

回答

1

不是,這可能是解決這一問題的最佳方案,同時回答一個問題:

var ids = string.Join(",", ArticleQueriable(articles, 70001)); 


Queriable<int> ArticleQueriable(Queriable<Article> tbl_Article, int parentID) 
{ 
    while (true) 
    { 
     var parent = tbl_Article.SingleOrDefault(a => a.ArticleID == parentID); 

     if (parent != null) 
     { 
      parentID = parent.ArticlePart.Dump(); 
      yield return parentID; 
     } 
     else 
     { 
      yield break; 
     } 
    } 
}