[英]LINQ filter list based on property value and filter the properties as well
我的NavigationItem
具有導航屬性NavigationItemsPermissions
,其中我具有RoleId
。 作為函數中的輸入參數,我具有List<int> roleIds
,其中將有類似{1,3}的內容。
我如何完成我的LINQ
給我回NavigationItem
(s)表示,有NavigationItemsPermissions
一些 RoleId
輸入列表中。 請注意 ,此外,我只需要輸入列表中帶有RoleId
那些NavigationItemsPermissions
。
這是我堅持的地方
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;
}
如果有開發人員列表,則給出一個簡單的類比(不是真實數據)
developers: [
{ name: "Hickory", skills: ["c#", "js", "linq"] }
{ name: "Dickory", skills: ["html", "css", "js"] }
{ name: "Dock", skills: ["html", "c#", "oracle"] }
]
和給定的技能list = [ "c#", "linq" ]
,我希望得到以下結果
[{ name: "Hickory", skills: ["c#", "linq"] }
{ name: "Dock", skills: ["c#"] }]
實際數據樣本:
感謝您的任何幫助。
在這種情況下,您可以使用contains
public List<NavigationItem> GetNavigationItems(MenuType menuType, List<int> roleIds)
{
var navigationItems = DbContext.NavigationItems.Where(x => x.MenuTypeId == (int) menuType && !x.IsDeleted && roleIds.contains(x.RoleId)));
return navigationItems;
}
這應該給您想要的結果
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;
}
編輯
如果“僅需要NavigationItemsPermissions.RoleId在roleIds中的NavigationItemsPermissions” ,則可以使用此查詢
var navigationPermissions = DbContext.NavigationItems
.Where(x => x.MenuTypeId == (int) menuType &&
!x.IsDeleted)
.SelectMany(ni => ni.NavigationItemsPermissions)
.Where(np => roleIds.Contains(np.RoleId))
.ToList();
如果有重復的項目並且只需要不同的項目,請在ToList()
Distinct()
之前使用Distinct()
。
編輯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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.