0

我有以下我一直在处理的代码:

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 的字段之一是名为 Roles 的字段。这是一个字符串字段,其内容显示可以访问菜单的每个项目的角色。字段中的数据如下所示:

All 
All,Admin 
All,Admin, Super
Admin
Admin, Super

我有一个字符串 [] 角​​色,其中填充了用户拥有的角色。如果用户有一个角色,则字符串数组中有一项,如果用户有两个角色,则有两项。如果用户没有角色,则数组为空。

如果 string[] 角色中的条目与我的角色字段中的单词之一匹配,我怎样才能使我的选择只返回一个值?

到目前为止,我一直在做一些研究,我发现以下内容几乎可以满足我的需要。但是我怎样才能把它放到我上面的 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;
4

1 回答 1

0

只需在 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
});
于 2013-01-23T17:33:05.747 回答