Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 谓词和列表_C#_List_Predicate_Findall - Fatal编程技术网

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的答案是最好的,因为它:

  • 不使用LINQ(询问者使用VS2005)
  • 不使用lambda表达式(同样,VS 2005)
  • 也就是说,为什么不编写一个函数来为您生成
    谓词
    ,让事情(稍微)变得简单一些呢

    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表达式不起作用。他需要使用
    委托
    语法。它为我澄清了一些事情。谢谢大家!那太好了。非常感谢,伙计们,我都快疯了。很棒的帖子丹。它为我澄清了一些事情。谢谢大家!那太好了。多谢各位,我都快疯了。