首页 > 解决方案 > Linq 从嵌套列表中选择属性

问题描述

那是我的代码:

class Controller {
    public List<Action> Actions {get; set;}
}

class Action {
    public int Id {get; set;
    public bool IsSelected {get; set;}
}

List<Controller> controllers = GetControllers();

var toAdd = viewModel.PermissionControllers
    .Where(x => x.Actions != null)
    .Where(x => x.Actions.Where(z => z.IsSelected)) // i Am having problem there
    .ToList();

我想通过set onIEnumerable<int>采取行动。如果没有 linq,它将是:IsSelectedtrue

var ints = new List<int>();

foreach (var controller in controllers)
{
    if (controller.Actions != null)
    {
        foreach (var action in Actions)
        {
            if (action.IsSelected)
                ints.Add(action.Id);
        }
    }
}

不幸的是,我被困在where. 你能帮助我吗?

标签: c#linq

解决方案


.Where(x => x.Actions.Where(z => z.IsSelected)) // i Am having problem there

您有一个问题Where需要bool确定是否应该包含它,但您提供了另一个Where产生操作而不是单个bool. 也许你想要:

List<int> actionIdList = viewModel.PermissionControllers
    .Where(x => x.Actions != null)
    .SelectMany(x => x.Actions.Where(a => a.IsSelected).Select(a => a.Id)) 
    .ToList();

如果重复是可能的并且您不想要它们,请DistinctSelectMany.


推荐阅读