LINQ到实体不识别方法

LINQ到实体不识别方法,linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,我有以下代码: public IList<Folder> GetArchivedFolders(int userId) { return _db.Folders.Where(f => f.IsArchived).Where(s => IsTopLevelArchivedFolder(s.FolderId) ).ToList(); } private bool IsTopLeve

我有以下代码:

    public IList<Folder> GetArchivedFolders(int userId)
    {
        return _db.Folders.Where(f => f.IsArchived).Where(s =>
            IsTopLevelArchivedFolder(s.FolderId)
            ).ToList();
    }
    private bool IsTopLevelArchivedFolder(int folderId)
    {
        var folder = GetFolder(folderId);
        if (folder.ParentFolderIdWhileArchived > 0)
        {
            if (folder.ParentFolderId != null && !GetFolder((int) folder.ParentFolderId).IsArchived)
            {
                return true;
            }
        }
        return false;
    }
    public IList<Folder> GetArchivedFolders(int userId)
    {

        return _db.Folders.
            Where(f => f.IsArchived).
            Where(s => IsTopLevelArchivedFolder(s)).
            ToList();
    }
    public bool IsTopLevelArchivedFolder(Folder folder)
    {
        return (folder.ParentFolderIdWhileArchived > 0) &&
           (folder.ParentFolderId != null && !folder.IsArchived);
    }
结果如下:

LINQ to实体无法识别方法“布尔” IsTopLevelArchivedFolder(Nogginator.Repository.Models.Folder)方法, 并且此方法无法转换为存储表达式


LINQ告诉您,它不知道如何将函数转换为SQL。您可以在
IQueryable
上使用
.AsEnumberable()
方法告诉LINQ在内存中执行函数:

public IList<Folder> GetArchivedFolders(int userId)
{
    return _db.Folders.Where(f => f.IsArchived)
                      .AsEnumerable()
                      .Where(s => IsTopLevelArchivedFolder(s.FolderId))
                      .ToList();
}
public IList GetArchivedFolders(int userId)
{
返回_db.Folders.Where(f=>f.IsArchived)
.可计算的()
.Where(s=>IsTopLevelArchivedFolder(s.FolderId))
.ToList();
}
public IList<Folder> GetArchivedFolders(int userId)
{
    return _db.Folders.Where(f => f.IsArchived)
                      .AsEnumerable()
                      .Where(s => IsTopLevelArchivedFolder(s.FolderId))
                      .ToList();
}