C# 将SQL查询转换为linq查询

C# 将SQL查询转换为linq查询,c#,sql,linq,C#,Sql,Linq,我有以下查询,我想用Linq(使用c#)编写它。我该怎么做 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 varch

我有以下查询,我想用Linq(使用c#)编写它。我该怎么做

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

并不是说这可能是解决问题的最佳方案,而是回答了以下问题:

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;
        }
    }
}
var-id=string.Join(“,”,articleQueryable(articles,70001));
可查询文章可查询(可查询tbl_文章,int parentID)
{
while(true)
{
var parent=tbl_Article.SingleOrDefault(a=>a.ArticleID==parentID);
如果(父项!=null)
{
parentID=parent.ArticlePart.Dump();
产生收益的parentID;
}
其他的
{
屈服断裂;
}
}
}

为了获得最佳性能,您应该将其作为SQL中的。linq不能做控制流,也不能做递归CTE。我建议您按照Magnus的建议编写一个递归CTE,然后使用EF或L2S或nHibernate将查询结果映射到对象中。检查Linqer如果Magnus和Aron的建议不可行,您的困难到底是什么?