C# 比较int时Linq到实体错误?对一个价值观
我正在尝试编写一个递归函数,它将遍历一棵树。我的实体“Folder”有两个属性:ParentFolderID和FolderID。如果文件夹位于根级别,则其ParentFolderID为null。我创建了一个递归函数,该函数接受paramater ID,并添加和返回与ID具有相同ParentFolderID的所有文件夹实体,但出现错误“无法创建类型为”System.Object“的常量值。在此上下文中仅支持基元类型或枚举类型。“ 以下是我的功能: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
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,在你的帮助下,我已经找到了我的答案。我是否可以发布有效的答案,但仍然将您的答案标记为“正确”答案?是的,您可以改进我的答案:)。它也可以帮助其他用户。