从linq中的对象中删除嵌套值

本文关键字:嵌套 删除 linq 对象 | 更新日期: 2023-09-27 17:57:51

我有一个名为copyAgencies的对象,该对象包含一个称为Programs的类,该类包含与程序有关的各种信息(名称、id等)。

我正在尝试编写foreach循环,以删除所有与某个id参数不匹配的程序
例如,copyAgencies可以包含11个不同的程序;传入3个ids意味着其他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
}

从linq中的对象中删除嵌套值

如果你只有一个像你在评论中所说的那样的机构,而这正是你所关心的,那么试试这个:

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));
}