关于Linq从子到父的查询

小D2013 2010-11-18 05:00:13
名称 上级分类
中国 null
北京 中国
大兴 北京


如何通过 一条linq 通过大兴找到中国, 注意分级可能会更多
...全文
147 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-11-18
  • 打赏
  • 举报
回复
用linq配合其他方法多别扭
小D2013 2010-11-18
  • 打赏
  • 举报
回复
好地,谢谢哈,我确实是要查找指定节点的根节点

bloodish 2010-11-18
  • 打赏
  • 举报
回复
做不到,你对每个要查找根节点的子节点都需要调用一次聚合函数.

如果你只想找根节点,为什么要搞得那么复杂?
如果你是查找指定子节点的根节点,多次查找时可以接受的.
小D2013 2010-11-18
  • 打赏
  • 举报
回复
bloodish:

用你的方法我可以做了,另外我想问问 如果 我加了 下面这些,而我要差的是一个List,也就是曼哈顿,大兴的根节点,用一条语句可以查出来吗
new Sample()
{
Name = "曼哈顿",
Sup = "纽约"
},
new Sample()
{
Name = "纽约",
Sup = "美国"
},
new Sample()
{
Name = "美国",
Sup = null,
}
bloodish 2010-11-18
  • 打赏
  • 举报
回复
可以用聚合函数来做


public class Sample
{
public string Name { get; set; }
public string Sup { get; set; }
}

List<Sample> list = new List<Sample>()
{
new Sample()
{
Name = "大兴",
Sup = "北京"
},
new Sample()
{
Name = "北京",
Sup = "中国"
},
new Sample()
{
Name = "中国",
Sup = null,
}
};

Sample result = list.Aggregate(list[0],(child,next) =>
{
if (string.IsNullOrEmpty(child.Sup))
{
return child;
}
else
{
return list.FirstOrDefault(n => n.Name == child.Sup);
}
});
fellowcheng 2010-11-18
  • 打赏
  • 举报
回复

var elements = xDom.Descendants("上级分类").Where(t => GetParent(t).Value=="中国");


private System.Xml.Linq.XElement GetParent(System.Xml.Linq.XElement n) {
while (n != null && n.Parent != null) {
n = n.Parent;
}
return n;
}
flyerwing 2010-11-18
  • 打赏
  • 举报
回复
list<object>sublst=plst.select(n=>n.pname).distinct().tolist();
....
一样的了
symbol_bc 2010-11-18
  • 打赏
  • 举报
回复
感觉就是用linq递归啊,linq能递归吗?
问问Tim,这个很给力!!!
兔子-顾问 2010-11-18
  • 打赏
  • 举报
回复
linq都可以用循环替代。你这里用循环更方便。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧