我有一個從存儲過程構建的菜單,它返回一個文件夾層次結構。該過程返回FolderID,Name和ParentID。在我的菜單資源庫中,我在文件夾列表上使用了ForEach()來添加與父文件夾關聯的每個子文件夾。使用Linq刪除同一對象中的孩子的父母
它看起來像這樣:
folders = await _dbcontext.MenuFolders.FromSql("EXEC UserMenuFolders @p0", UserID)
.Select(x => new MenuFolder
{
FolderID = x.FolderID,
FolderName = x.FolderName,
SortOrder = x.SortOrder,
SubofID = x.SubofID
})
.ToListAsync();
folders.ForEach(x => x.SubFolders = folders
.Where(y => y.SubofID == x.FolderID)
.OrderBy(y => y.SortOrder)
.ToList());
這給了我一個對象,它看起來有點像:
"Folder 1": {
"Sub Folder 1": [
"SubFolder 1.1",
"SubFolder 1.2"
],
"Sub Folder 2": [
"SubFolder 2.1",
"SubFolder 2.2"
]
},
"Folder 2": {
//Other sub Folders
},
"SubFolder 1":{},
"SubFolder 1.1":{},
"SubFolder 1.2": {}
你可以看到,子文件夾都在那裏兩次,因爲初始查詢得到所有文件夾。我如何從列表中刪除子文件夾的文件夾?另外,我很想看看是否有更高效的方法來創建這個菜單結構,但請記住我必須使用存儲過程,因爲授權邏輯已經在那裏建立了。
這是我認爲沒有做任何愚蠢的嘗試:
folders.RemoveAll(x => x.SubFolders.Any(c=> c.FolderID == x.FolderID));
而下面是我的MenuFolders實體:
public int FolderID { get; set; }
public string FolderName { get; set; }
public int ParentID { get; set; }
[ForeignKey("ParentID")]
public List<MenuFolder> SubFolders { get; set; }
public Int16 SortOrder { get; set; }
你想從樣本中刪除哪個'SubFolder 1.1'?第一個還是第二個? _請包含'UserMenuFolders'的源代碼._ – mjwills
第二個。如果該文件夾在ForEach後成爲孩子,我想將其刪除。 – Eric