LINQ 递归 关注, 网上找不到材料. 用一条LINQ 递归.求大侠.解决办法
发布时间:2011-06-24 21:48:15 文章来源:www.iduyao.cn 采编人员:星星草
LINQ 递归 关注,,,, 网上找不到材料...... 用一条LINQ 递归......求大侠.....
用一条LINQ 递归......求大侠
最简单的一种,希望大侠能给我点提示/........
id subid
1 2
2 3
3 4
a b
b 5
a 6
c 7
: :
: :
: :
给出.id = 3
递归求出. 相关连的 id
为 1,2,3
关注....
------解决方案--------------------
也许不用LINQ更好吧,但如果你坚持的话,大概这样吧
using System;
using System.Collections.Generic;
using System.Linq;
class Node
{
public string ID { get;set;}
public string ParentID { get;set;}
}
static class NodeExtension
{
public static IEnumerable<Node> GetAncestors(this IEnumerable<Node> nodes, string parentID)
{
var parentNodes = from node in nodes
where node.ID == parentID
select node;
foreach(var node in parentNodes)
{
yield return node;
}
foreach(var node in parentNodes)
{
foreach(var p in nodes.GetAncestors(node.ParentID))
yield return p;
}
}
}
class TestID
{
static void Main()
{
List<Node> nodes = new List<Node>
{
new Node {ID = "1", ParentID=null},
new Node {ID = "2", ParentID="1"},
new Node {ID = "3", ParentID="2"},
new Node {ID = "4", ParentID="3"},
new Node {ID = "5", ParentID="4"},
new Node {ID = "a", ParentID="5"},
new Node {ID = "b", ParentID="a"}
};
var ancensters = nodes.GetAncestors("3");
foreach(var node in ancensters)
Console.WriteLine("{0}={1}",node.ID,node.ParentID);
}
}
------解决方案--------------------
LS的做法其实与LINQ无关。
这种问题当然最好的办法就是递归,树形结构本来就是递归所解决的问题。
SQL是面向集合的而不是面向树的查询语言,LINQ不过是把SQL语法写到程序中。很明显,SQL本来就没法解决树的问题,难道说写到程序中就能解决了?
------解决方案--------------------
实际上,你写一个返回IQueryable<T>的函数(很简单,只有两三条语句)然后在表达式中调用这个函数就能递归了。
------解决方案--------------------
Func<int, int> factorial =
Extensions.YCombinator<int, int>(
fact =>
n => n < 2 ? 1 : n * fact(n - 1));
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
LINQ 方法参数看不懂
怎么我在编译器写代码LINQ方法参数提示看不懂啊,比如 GroupBy(Of TSource, TKey)(IQueryable(Of TSource), E...
-
LINQ 对GridView分页排序处理?
我始终觉得LINQ对gridview分页排序操作很麻烦,请问有什么好的办法啊?还有以前写SQL语句,调试时候很方...
-
Mvc强类型列表如何修改字段
我用这个循环了一个文章列表,但是我要把文章内容字段的html代码给剔除掉,请问怎么做
------解决方案-...
-
Linq查询List<T>无值
List<Wisesoft.Tool.Log.Model.LoginLogInfo> listLog = new List<Wisesoft.Tool.Log.Model.LoginLogInfo>(...
-
SQL中的 is null 在linq中怎么表示
各位大哥,小弟想问下在 sql中的 where coulumn is null这个语句用linq应该怎么写,急用
------...
-
linq + GridView页面数据没有显示
protected void Page_Load(object sender, EventArgs e)
{
//Database db = new...
-
linq to sql 查询的问题,求助
对linq 还不是很熟悉,接触linq了,就有一种冲动要使用它,不用ado了,可是前段时间写一个linq 查询语句的...
-
请教各位 创建SQL server数据库的查询表达式
各位,我那本教程上说,创建一DBML文件,之后什么“创建一个SQL server数据库类型的数据源...
-
类型“System.String[]”不支持比较运算符。
return dc.Content.Where(c => c.Status == status && c.AuditList.Split(',')...
-
请教几个问题linq和数据绑定
1.用vs的O/R设计器生成的Linq to sql 的对象模型会为每个类添加 PropertyChangedEventHandler Prope...