azz*_*idz 3 c# linq asp.net-mvc ef-database-first
我NavigationItem
有导航属性NavigationItemsPermissions
,我有RoleId
。作为函数中的输入参数,我List<int> roleIds
将拥有类似 {1, 3} 的内容。
我如何完成我的工作并把输入列表中的一些内容LINQ
还给我。另外请注意,我只想要输入列表中包含的内容。NavigationItem
NavigationItemsPermissions
RoleId
NavigationItemsPermissions
RoleId
这就是我被困的地方
public List<NavigationItem> GetNavigationItems(MenuType menuType, List<int> roleIds)
{
var navigationItems = DbContext.NavigationItems.Where(x => x.MenuTypeId == (int) menuType && !x.IsDeleted && x.NavigationItemsPermissions.Any(r=>r.RoleId **in roleIds**)));
return navigationItems;
}
Run Code Online (Sandbox Code Playgroud)
举个更简单的比喻(不是真实数据),如果有一个开发者列表
developers: [
{ name: "Hickory", skills: ["c#", "js", "linq"] }
{ name: "Dickory", skills: ["html", "css", "js"] }
{ name: "Dock", skills: ["html", "c#", "oracle"] }
]
Run Code Online (Sandbox Code Playgroud)
以及给定的技能列表list = [ "c#", "linq" ]
,我想要以下结果
[{ name: "Hickory", skills: ["c#", "linq"] }
{ name: "Dock", skills: ["c#"] }]
Run Code Online (Sandbox Code Playgroud)
真实数据样本:
感谢您的任何帮助。
这应该会给你想要的结果
public List<NavigationItem> GetNavigationItems(MenuType menuType, List<int> roleIds)
{
var navigationItems = DbContext.NavigationItems
.Where(x => x.MenuTypeId == (int) menuType &&
!x.IsDeleted &&
x.NavigationItemsPermissions.Any(r => roleIds.Contains(r.RoleId)));
return navigationItems;
}
Run Code Online (Sandbox Code Playgroud)
编辑
如果您“只需要NavigationItemsPermissions,其中NavigationItemsPermissions.RoleId位于roleIds中”,则可以使用此查询
var navigationPermissions = DbContext.NavigationItems
.Where(x => x.MenuTypeId == (int) menuType &&
!x.IsDeleted)
.SelectMany(ni => ni.NavigationItemsPermissions)
.Where(np => roleIds.Contains(np.RoleId))
.ToList();
Run Code Online (Sandbox Code Playgroud)
如果有重复的项目并且您只需要不同的项目,请使用Distinct()
before 。ToList()
编辑2
var navigationItems = DbContext.NavigationItems
.Where(x => x.MenuTypeId == (int) menuType &&
!x.IsDeleted &&
x.NavigationItemsPermissions.Any(r => roleIds.Contains(r.RoleId)));
navigationItems.ForEach(x => x.NavigationItemsPermissions = x.NavigationItemsPermissions.Where(r => roleIds.Contains(r.RoleId)).ToList());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7962 次 |
最近记录: |