私が取り組んでいる次のコードがあります。
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 が返すフィールドの 1 つは、役割と呼ばれるフィールドです。これは、メニューの各項目にアクセスできるロールを示す内容を含む文字列フィールドです。フィールド内のデータは次のようになります。
All
All,Admin
All,Admin, Super
Admin
Admin, Super
ユーザーが持っているロールが入力された string[] ロールがあります。ユーザーが 1 つの役割を持っている場合、文字列配列には 1 つの項目があり、ユーザーが 2 つの役割を持っている場合は 2 つの項目があります。ユーザーに役割がない場合、配列は空です。
string[] ロールのエントリが Roles フィールドの単語の 1 つと一致する場合にのみ、select が値を返すようにするにはどうすればよいですか?
これまでのところ、いくつかの調査を行ってきましたが、必要なことをほぼ実行する次のものが見つかりました。しかし、これを上記の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;