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

时间:2014-04-11 13:25:35

标签: c# linq

我有一个名为copyAgencies的对象,它包含被调用程序中的另一个对象,其中包含与该程序有关的各种信息(name,id,ect ...)。我写了一个foreach循环,删除所有与我正在通过的id参数不匹配的程序。例如,程序可以包含11个不同的程序,我传入3个id,并希望从copyAgencies对象中删除其他8个程序。我该如何实现这一目标?以下是我失败的代码。

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
}

2 个答案:

答案 0 :(得分:1)

如果您在评论中只有一个像您所说的代理机构,并且您只关心这一点,请尝试以下方法:

copyAgencies[0].Programs.RemoveAll(x => !chkIds.Contains(x.ProgramId));

答案 1 :(得分:0)

过滤掉值的一种简单方法是避免删除您不感兴趣的值,但过滤您感兴趣的值:

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