c# - 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,它将是:IsSelected
true
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
. 你能帮助我吗?
解决方案
.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();
如果重复是可能的并且您不想要它们,请Distinct
在SelectMany
.
推荐阅读
- apache-spark - Spark.Sql 无法从配置单元表中读取日语(Mutltbyte 字符)?
- c# - 为什么 NetMQ 不能在 NUnit 环境中工作
- python - 是否有一个快速的 Python 函数可以将数字转换为不同的基数?
- protege - 如何在 protege 5 中使用 protege 编辑器将特定个人添加到 swrl 规则?
- javascript - Safari/IOS 上不显示侧边栏菜单
- c# - 删除 XML 中的 vbaProject.bin 不足以保存为 xlsx
- node.js - 如何在 cloudbuild.yaml 中使用带有 KMS 的 Google Cloud Build 将多个环境变量作为机密传递?
- c - 当我尝试使用 PQnfelds 时,PostgreSQL 说“找不到符号”
- microsoft-graph-excel - “IWorkbookWorksheetRangeRequestBuild”不包含“格式”的定义
- google-cloud-platform - 在 Google Cloud VM 上运行 Jupyter Notebook 时出现 SSL 错误