从linq中的对象中删除嵌套值
本文关键字:嵌套 删除 linq 对象 | 更新日期: 2023-09-27 17:57:51
我有一个名为copyAgencies
的对象,该对象包含一个称为Programs
的类,该类包含与程序有关的各种信息(名称、id等)。
我正在尝试编写foreach循环,以删除所有与某个id
参数不匹配的程序
例如,copyAgencies
可以包含11个不同的程序;传入3个id
s意味着其他8个程序应该从copyAgencies
对象中删除。
我尝试了以下代码,但失败了。你能帮我把它做好吗?
foreach (int id in chkIds)
{
//copyAgencies.Select(x => x.Programs.Select(b => b.ProgramId == id));
copyAgencies.RemoveAll(x => x.Programs.Any(b => b.ProgramId != id)); //removes all agencies
}
如果你只有一个像你在评论中所说的那样的机构,而这正是你所关心的,那么试试这个:
copyAgencies[0].Programs.RemoveAll(x => !chkIds.Contains(x.ProgramId));
筛选值的一个简单方法是避免删除您不感兴趣的值,而是筛选您感兴趣的:
var interestingPrograms = Programs.Where(p => chkIds.Contains(p.Id));
为了将其应用于您的机构,您可以简单地列举机构并筛选出Programs
属性
var chckIds = new List<int>() {1,2,3};
foreach (var a in agencies)
{
a.Programs = a.Programs.Where(p => chkIds.Contains(p.Id));
}