0
我有以下代码:LINQ到实体无法识别方法
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;
}
这不是工作,但因为它似乎EF不能运行我的代码。
我尝试这样做:
public System.Linq.Expressions.Expression<Func<Folder, bool>> IsTopLevelArchivedFolder()
{
var folder = this;
if (folder.ParentFolderIdWhileArchived > 0)
{
if (folder.ParentFolderId != null && !GetFolder((int) folder.ParentFolderId).IsArchived)
{
return true;
}
}
return false;
}
但this
解析为容器类,而不是一个Folder
对象。有没有什么办法可以在这个查询中运行我的代码?
UPDATE:
以下代码:
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实体无法识别方法“布尔 IsTopLevelArchivedFolder(Nogginator.Repository。 Models.Folder)'方法, 并且此方法无法转换为商店表达式。
感谢马蒂亚斯! – SB2055