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();
}