C# 比较int时Linq到实体错误?对一个价值观

C# 比较int时Linq到实体错误?对一个价值观,c#,linq,entity-framework,C#,Linq,Entity Framework,我正在尝试编写一个递归函数,它将遍历一棵树。我的实体“Folder”有两个属性:ParentFolderID和FolderID。如果文件夹位于根级别,则其ParentFolderID为null。我创建了一个递归函数,该函数接受paramater ID,并添加和返回与ID具有相同ParentFolderID的所有文件夹实体,但出现错误“无法创建类型为”System.Object“的常量值。在此上下文中仅支持基元类型或枚举类型。“ 以下是我的功能: private List<Folde

我正在尝试编写一个递归函数,它将遍历一棵树。我的实体“Folder”有两个属性:ParentFolderID和FolderID。如果文件夹位于根级别,则其ParentFolderID为null。我创建了一个递归函数,该函数接受paramater ID,并添加和返回与ID具有相同ParentFolderID的所有文件夹实体,但出现错误“无法创建类型为”System.Object“的常量值。在此上下文中仅支持基元类型或枚举类型。“

以下是我的功能:

    private List<Folder> GetFolderChildren(int? folderId)
    {
        var childFolders = new List<Folder>();

        //  finalList is List<> that is actually returned
        var finalList = new List<Folder>();

        //  Your looking at the root level folder
        if (folderId == null)
        {
            childFolders = DocumentEntities.Folders.Where(x => x.ParentFolderID.Equals(folderId)).ToList();
        }
        else
        {
            childFolders = DocumentEntities.Folders.Where(x => x.ParentFolderID == folderId).ToList();
        }

        //  If there are no childFolders, then you've hit the bottom of this branch.  Return this folder.
        if (!childFolders.Any())
        {
            finalList.Add(DocumentEntities.Folders.SingleOrDefault(x => x.FolderID == folderId));
        }
        else
        {
            foreach (var childFolder in childFolders)
            {
                finalList.AddRange(GetFolderChildren(childFolder.FolderID, pageName));
            }

            //  Now that you've gone through this folders children, add this folder
            finalList.Add(DocumentEntities.Folders.SingleOrDefault(x => x.FolderID == folderId));
        }

        return finalList;
    }
私有列表GetFolderChildren(int?folderId) { var childFolders=新列表(); //finalList是实际返回的列表 var finalList=新列表(); //您正在查看根级别的文件夹 if(folderId==null) { childFolders=DocumentEntities.Folders.Where(x=>x.ParentFolderID.Equals(folderId)).ToList(); } 其他的 { childFolders=DocumentEntities.Folders.Where(x=>x.ParentFolderID==folderId.ToList(); } //如果没有子文件夹,则您已到达此分支的底部。返回此文件夹。 如果(!childFolders.Any()) { 添加(DocumentEntities.Folders.SingleOrDefault(x=>x.FolderID==FolderID)); } 其他的 { foreach(childFolders中的var childFolder) { AddRange(GetFolderChildren(childFolder.FolderID,pageName)); } //现在您已经查看了此文件夹的子文件夹,请添加此文件夹 添加(DocumentEntities.Folders.SingleOrDefault(x=>x.FolderID==FolderID)); } 回归终结者; }
当folderID为null或int时,它不会到达foreach。有什么想法吗?

如果
x.ParentFolderID
null
,您将无法访问
Equals
方法,因为它为null。尝试将整个值与参数进行比较,因为它具有相同的类型,例如

childFolders = Entities.Folders.Where(x => x.ParentFolderID == folderId).ToList();

如果
x.ParentFolderID
null
,您将无法在
Equals
方法中访问,因为它为null。尝试将整个值与参数进行比较,因为它具有相同的类型,例如

childFolders = Entities.Folders.Where(x => x.ParentFolderID == folderId).ToList();

你应该删除冗余的
catch
子句。我同意你@YuvalItzchakov,我把它放在那里是为了看看抛出了什么错误。你应该删除冗余的
catch
子句。我同意你@YuvalItzchakov,我把它放在那里是为了看看抛出了什么错误。但是如果搜索从ParentFolderID为null的地方开始,这似乎会阻止你从“根级别”开始?是的,你是对的@Jason。如果它是从根级别开始的,则我编辑了anwser:)。谢谢你的评论。好的@FelipeOriani,在你的帮助下,我已经找到了我的答案。我是否可以发布有效的答案,但仍然将您的答案标记为“正确”答案?是的,您可以改进我的答案:)。它也可以帮助其他用户。但是如果搜索在ParentFolderID为空的地方开始,这似乎会阻止您从“根级别”开始?是的,您是对的@Jason。如果它是从根级别开始的,则我编辑了anwser:)。谢谢你的评论。好的@FelipeOriani,在你的帮助下,我已经找到了我的答案。我是否可以发布有效的答案,但仍然将您的答案标记为“正确”答案?是的,您可以改进我的答案:)。它也可以帮助其他用户。