在C#中模拟CTE递归

在C#中模拟CTE递归,第1张

在C#中模拟CTE递归

相比之下,SQL Server中的递归速度非常慢,但是确实可以正常工作。

我不得不说,T-SQL在某种程度上受到限制,但是它从来没有打算首先进行所有这些 *** 作。我不相信如果您打算针对SQLServer实例运行IQueryable,则无法通过IQueryable来实现,但是您可以在运行代码的机器上的内存中使用LINQ-to-Objects来实现。紧凑的方式。

这是一种方法:

class TreeNode{    public int Id;    public int? ParentId;}static void Main(string[] args){    var list = new List<TreeNode>{        new TreeNode{ Id = 1 }, new TreeNode{ Id = 4, ParentId = 1 }, new TreeNode{ Id = 5, ParentId = 1 }, new TreeNode{ Id = 6, ParentId = 1 },        new TreeNode{ Id = 2 }, new TreeNode{ Id = 7, ParentId= 2 },     new TreeNode{ Id = 8, ParentId= 7 },        new TreeNode{ Id = 3 },    };    foreach (var item in Level(list, null, 0))    {        Console.WriteLine("Id={0}, Level={1}", item.Key, item.Value);    }}private static IEnumerable<KeyValuePair<int,int>> Level(List<TreeNode> list, int? parentId, int lvl){    return list        .Where(x => x.ParentId == parentId)        .SelectMany(x =>  new[] { new KeyValuePair<int, int>(x.Id, lvl) }.Concat(Level(list, x.Id, lvl + 1))        );}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5640821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存