2016-05-23 5 views
0

this Blogを使用してasp.net-core MVC 6の動的メニューをまとめました。asp.net mvcリスト内のリストを含む簡単なLINQ文の問題

私は2つの基準に基づいてオブジェクトのサブセットを選択したいmenuItemオブジェクトを持っています。ここでメニューオブジェクトは、次のとおりです。これらの項目のリストは次のような行を使用して移入された

public class MenuItem 
{ 
    public int Id { get; set; } 
    public bool Divider { get; set; } 
    public bool Header { get; set; } 
    public string ActionName { get; set; } 
    public string ControllerName { get; set; } 
    public string MenuItemText { get; set; } 
    public IList<string> Roles { get; set; } 
    public int ParentId { get; set; } 

    public MenuItem() 
    { 

    } 

    public MenuItem(int id, bool divider, bool header, string action, string controller, string menuItemText, IList<string> roles,int parentid) 
    { 
     Id = id; 
     Divider = divider; 
     Header = header; 
     ActionName = action; 
     ControllerName = controller; 
     MenuItemText = menuItemText; 
     Roles = roles; 
     ParentId = parentid; 
    } 
} 

MenuList.MenuItems.Add(new MenuItem(100, false, false, "Index", "Scheduler", "Scheduling", new List<string>() { "Admin", "Technician" }, 0)); 

私はこのラインを使用して、ParentIdはに基づいたもののMenuItemを選択することができ、それが動作します:

特に

_menuData.GetUnAuthorizedMenus().Result.MenuItems.Where(s => s.ParentId == parentId).ToList(); 

MenuItems.Where(s => s.ParentId == parentId).ToList(); 

ParentId == parentIdの行を選択するにはどうすればいいですか?

ロール== "Admin"。

menuItemには、このMenuItemが属するロールのリストがあり、そのリスト内に特定のロールがあるかどうかに基づいてこれらのアイテムを選択したいと考えています。あなたは上記のように、特定のサブリストでの役割だけでなく、ParentIdはとのみメニューアイテムを選択するにはどうすればよい

...

+2

を使用し、その後もサブリストをフィルタリングする場合 - '.Where(S => s.ParentId == PARENTID &&秒.Roles.Contains( "Admin")) ' –

答えて

2

これは

MenuItems.Where(s => s.ParentId == parentId && s.Roles.Contains("Admin")).ToList(); 

または多分

MenuItems.Where(s => s.ParentId == parentId && s.Roles.Count() == 1 && s.Roles.Contains("Admin")).ToList(); 

を動作するはずですメニュー項目がの場合は、の管理者ロール

1

これを試してみてください。ここでは、id = parent idとroleがadminのサブリストのレコードが返されます。

menuItems.Where(x => x.Id == parentId).Where(z => z.Roles.Any(y => y == "Admin")); 

そして、あなたはあなたが `.Contains()`句を使用することができます

menuItems.Where(x => x.Id == parentId).select(child => new MenuItems 
{ 
//Populate parent properties 
Roles = child.Roles.Where(x=>x=="Admin") 
}); 
関連する問題