如何基于至少有一个条目与字符串数组中的行匹配的字段来限制 linq 查询中的行



我一直在处理以下代码:

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
});

相关内容

  • 没有找到相关文章

最新更新