using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Yi.Framework.Interface; using Yi.Framework.Model.Models; namespace Yi.Framework.Service { public partial class MenuService:BaseService, IMenuService { public async Task AddChildrenMenu(int menu_id, menu _children) { var menu_data = await _Db.Set().Include(u => u.children).Where(u => u.id == menu_id).FirstOrDefaultAsync(); _children.is_top = (short)Common.Enum.TopFlagEnum.Children; menu_data.children.Add(_children); await UpdateAsync(menu_data); return menu_data; } /// /// 这个getEntity没有关联子类,怎么能得到子类呢?这是一个错误的接口 /// /// /// public async Task> GetChildrenByMenu(menu _menu) { var menu_data = await GetEntity(u=>u.id==_menu.id&& u.is_delete == (short)Common.Enum.DelFlagEnum.Normal); var childrenList = menu_data.children.ToList(); return childrenList; } /// /// 不要返回一个新创的变量,直接返回menu.children,只要id,就不要传一个对象 /// /// /// public async Task> GetChildrenMenu(menu _menu) { var menu= await _Db.Set().Include(u => u.children).Include(u=>u.mould) .Where(u =>u.id==_menu.id&& u.is_top == (short)Common.Enum.TopFlagEnum.Children ) .FirstOrDefaultAsync(); var childrenList = menu.children.ToList(); return childrenList; } public async Task> GetMenuMould() { var menuList= await _Db.Set().Include(u => u.children).Include(u => u.mould) .Where(u => u.is_delete == (short)Common.Enum.DelFlagEnum.Normal ) .ToListAsync(); return menuList; } /// /// 和GetChildrenMenu方法可以合并 /// /// /// public async Task GetMenuMouldByMenu(menu _menu) { var menu_data = await _Db.Set().Include(u => u.children).Include(u=>u.mould) .Where(u=>u.id==_menu.id&& u.is_delete == (short)Common.Enum.ShowFlagEnum.Show) .FirstOrDefaultAsync(); return menu_data; } public async Task GetMouldByMenu(menu _menu) { var menu_data =await _Db.Set().Include(u => u.mould).Where(u => u.id == _menu.id).FirstOrDefaultAsync(); return menu_data.mould; } /// /// 5层迭代 /// /// public async Task> GetTopMenu() { var menu_data= await _Db.Set().Include(u=>u.mould) .Include(u => u.children).ThenInclude(u => u.mould) .Include(u=>u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Include(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.children).ThenInclude(u => u.mould) .Where(u =>u.is_delete == (short)Common.Enum.DelFlagEnum.Normal && u.is_top == (short)Common.Enum.ShowFlagEnum.Show) .OrderByDescending(u=>u.sort) .ToListAsync(); return TopMenuBuild(menu_data); } /// /// 过滤已经被删除的(这个应该是别的地方有方法的,不应该写到service层里面的) /// /// /// private List TopMenuBuild(List menu_data) { for(int i = menu_data.Count()-1; i >=0; i--) { if(menu_data[i].is_delete == (short)Common.Enum.DelFlagEnum.Deleted) { menu_data.Remove(menu_data[i]); } else if(menu_data[i].children != null) { menu_data[i].children= TopMenuBuild(menu_data[i].children.ToList()); } } return menu_data; } /// /// 要关联啊,menudata要关联mould,而且能用find就用find /// /// /// /// public async Task SetMouldByMenu(int mouldId, int menuId) { var menu_data = await GetEntity(u => u.id == menuId); var mould_data = await _Db.Set().Where(u => u.id==mouldId).FirstOrDefaultAsync(); menu_data.mould = mould_data; return await UpdateAsync(menu_data); } } }