2013-05-18 68 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; 
     } 
    } 
}