【问题标题】:Linq to Entities error when comparing int? to a values比较int时Linq to Entities错误?到一个值
【发布时间】:2014-09-10 23:39:10
【问题描述】:

我正在尝试编写一个遍历树的递归函数。我的实体“文件夹”具有 ParentFolderID 和 FolderID 两个属性。如果文件夹位于根级别,则其 ParentFolderID 为空。我创建了一个递归函数,它接受参数 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;
    }

当 folderID 为 null 或 int 时,它永远不会到达 foreach。有什么想法吗?

【问题讨论】:

  • 您应该删除多余的catch 子句。
  • 我同意你的观点@YuvalItzchakov,我把它放在那里看看抛出了什么错误。

标签: c# linq entity-framework


【解决方案1】:

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

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

【讨论】:

  • 但是如果搜索从 ParentFolderID 为空的地方开始,这似乎会阻止您从“根级别”开始?
  • 是的,你是对的@Jason。如果它从根级别开始,我编辑了我的 anwser :)。感谢您的评论。
  • 好的@FelipeOriani,我已经找到了答案(在你的帮助下)。我可以发布有效但仍将您的答案标记为“正确”的答案吗?
  • 是的,你可以改进我的 anwser :)。它也可以帮助其他用户。
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 2013-06-26
  • 2012-12-17
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多