栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C#中模拟CTE递归

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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))        );}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号