2014-04-11 37 views
1

我有一个名为copyAgencies的对象,它包含被调用程序中的另一个对象,其中包含有关该程序(名称,ID等)的各种信息。我写了一个foreach循环,删除所有与我通过的id参数不匹配的程序。例如,程序可能包含11个不同的程序,我传入3个id,并想从copyAgencies对象中删除其他8个程序。我如何做到这一点?以下是我的失败代码。从linq中的对象中删除嵌套值

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 
} 
+0

你有什么代码产生? – clcto

+0

为我们提供了更多有关您的课程的信息。据我所知,您希望从“程序”中删除程序,而不是代理机构 –

+0

该代码为我提供了一个代理机构,其中有11个程序与之关联。我想删除不等于我通过的编号 – jpavlov

回答

1

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

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

就是它Racil,在这个函数中只会有一个代理并且永远不会再有。伟大的思想! – jpavlov

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