我一直在处理以下代码:
var menuItems = _contentRepository.GetPk("01" + pk + "000")
.OrderBy(m => m.Order)
.Select(m => new Menu.Item
{
PartitionKey = m.PartitionKey,
RowKey = m.RowKey,
Order = m.Order,
Title = m.Title,
Type = m.Type,
Link = m.Link,
TextLength = m.TextLength
});
返回的字段之一。GetPk 是一个名为"角色"的字段。这是一个字符串字段,其内容显示可以访问菜单每个项目的角色。字段中的数据如下所示:
All
All,Admin
All,Admin, Super
Admin
Admin, Super
我有一个字符串[]角色,其中填充了用户具有的角色。如果用户有一个角色,则字符串数组中有一个项目,如果用户有两个角色,则有两个项目。如果用户没有角色,则数组为空。
如何使我的选择仅在字符串 [] 角色中的条目与我的"角色"字段中的单词之一匹配时才返回值?
到目前为止,我一直在做一些研究,我发现以下内容几乎可以满足我的需求。但是我怎样才能把它放到上面的 Linq 中呢?
String[] roles = Roles.GetRolesForUser();
var links = from item in menus
where item.Roles.Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries)
.Any(x => roles.Contains(x) || x == "All")
select item;
只需将该条件包含在 Where 子句中,然后再将结果选择到所需的表单中。
var menuItems = _contentRepository.GetPk("01" + pk + "000")
.OrderBy(m => m.Order)
.Where(m => m.Roles.Split(",").Any(x => roles.Contains(x) || x == "All"))
.Select(m => new Menu.Item
{
PartitionKey = m.PartitionKey,
RowKey = m.RowKey,
Order = m.Order,
Title = m.Title,
Type = m.Type,
Link = m.Link,
TextLength = m.TextLength
});