C# 谓词和列表
我有一个通用列表 此列表的某些元素属于父元素。我从数据库中检索了所有这些元素,我想用它们递归地构建一棵树 所以,以下是我的想法: 这是我的谓词:C# 谓词和列表,c#,list,predicate,findall,C#,List,Predicate,Findall,我有一个通用列表 此列表的某些元素属于父元素。我从数据库中检索了所有这些元素,我想用它们递归地构建一棵树 所以,以下是我的想法: 这是我的谓词: public static bool FindChildren(Int32 parentId,CategoryMapping catMapping) { if (catMapping.parentId == parentId) { return true; } else { ret
public static bool FindChildren(Int32 parentId,CategoryMapping catMapping)
{
if (catMapping.parentId == parentId)
{
return true;
}
else
{
return false;
}
}
root = list[0];
root.childrenElements = root.FindAll(FindChildren(root.id,???)
我不知道这是怎么回事。我如何做这种谓词
附言:我正在使用VS2005:(试试看
root.childrenElements =
root
.Where( i => i.parentId == yourCatMapping.parentId)
.ToArray();
编辑
在.NET2.0中,我认为是这样的
root.FindAll(
delegate(CategoryMapping mapping)
{
return mapping.parentId == root.Id;
});
试一试
编辑
在.NET2.0中,我认为是这样的
root.FindAll(
delegate(CategoryMapping mapping)
{
return mapping.parentId == root.Id;
});
您需要指定要传递给
FindAll
的委托,而不是直接的函数调用
(假设root
是List
)
您需要指定要传递给
FindAll
的委托,而不是直接的函数调用
(假设root
是List
)
Gregoire的答案是最好的,因为它:
谓词,让事情(稍微)变得简单一些呢
public static Predicate<CategoryMapping> GetIsChildOf(int parentId) {
return delegate(CategoryMapping cm) {
return cm.parentId == parentId;
};
}
Gregoire的答案是最好的,因为它:
不使用LINQ(询问者使用VS2005)
不使用lambda表达式(同样,VS 2005)
也就是说,为什么不编写一个函数来为您生成谓词,让事情(稍微)变得简单一些呢
public static Predicate<CategoryMapping> GetIsChildOf(int parentId) {
return delegate(CategoryMapping cm) {
return cm.parentId == parentId;
};
}
您应该查看我为C#/.NET2.0启动的这个线程
它非常清楚地回答了您的问题。您应该查看我为C#/.NET2.0启动的这个线程
它非常清楚地回答了你的问题。@George:如果你不知道,你可以返回catMapping.parentId==parentId
,你不需要if/else语句。@George:如果你不知道,你可以返回catMapping.parentId==parentId
,你不需要if/else语句。Asker在.net 2.0上,并且erefore没有linq@Binary担忧者:问题的答案是最近的;)Asker在.NET2.0上,因此没有linq@Binary担忧者:这个问题的答案是最近的;)George正在使用VS 2005,因此lambda表达式不起作用。他需要使用委托
语法。George使用的是VS 2005,因此lambda表达式不起作用。他需要使用委托
语法。它为我澄清了一些事情。谢谢大家!那太好了。非常感谢,伙计们,我都快疯了。很棒的帖子丹。它为我澄清了一些事情。谢谢大家!那太好了。多谢各位,我都快疯了。