相比之下,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)) );}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)